给定一个类定义,如:
public class Test<T>
{
T _value;
public void Test(T value)
{
_value = value;
}
public void DoStuff()
{
if(_value.HasValue)
{
//stuff
}
}
}
我想强制说T是可空的,所以我可以使用类:
//does stuff
new Test<int?>(3).DoStuff();
//doesn't do stuff
new Test<int?>(null).DoStuff();
解决方法:
你不能强制T本身是一个可以为空的值类型,不.您可以强制T是不可为空的值类型,然后 – 然后使用T?在课堂上到处都是.
public class Test<T> where T : struct
{
T? _value;
public void Test(T? value)
{
_value = value;
}
public void DoStuff()
{
if(_value.HasValue)
{
//stuff
}
}
}
另一个特点是你不能将T约束为包含引用类型的任何可空类型 – 同样,你也不能将T约束为任何值类型,包括可空值类型. where T:class约束仅适用于类(包括委托类型)和接口,以及where T:struct约束仅适用于非可空值类型(包括枚举).