我正在寻找这样的示例用法:
Foo<string> stringFoo = new Foo<string>("The answer is");
Foo<int> intFoo = new Foo<int>(42);
// The Value of intFoo & stringFoo are strongly typed
stringFoo.Nullify();
intFoo.Nullify();
if (stringFoo == null && intFoo == null)
MessageBox.Show("Both are null);
给定这个类 Foo,我可以将 T 自动包装成一个可为空的:
public class Foo1<T>
where T : struct
{
private T? _value;
public Foo(T? initValue)
{
_value = initValue;
}
public T? Value { get { return _value; } }
public void Nullify { _value = null; }
}
这适用于原语,但不适用于 String 或其他类。
下一个风味适用于字符串,但不适用于原语:
public class Foo2<T>
{
private T _value;
public Foo(T initValue)
{
_value = initValue;
}
public T Value { get { return _value; } }
public void Nullify { _value = default(T); }
}
我可以使用Nullable<int>
Foo2 并且代码将像这样工作:
Foo2<int?> intFoo = new Foo<int?>(42);
但这很容易出错,因为 Foo2 失败了。如果我可以将 T 限制为支持可空性的类型,那很好。
那么毕竟,有没有办法将 T 限制为可为空的类型?
一些附加说明:.NET 4.0、VS2010。我确实在这里找到了一个与此类似的问题,但没有成功的答案。