Gor*_*ord 4 c# generics nullable
给定一个类定义,如:
public class Test<T>
{
T _value;
public void Test(T value)
{
_value = value;
}
public void DoStuff()
{
if(_value.HasValue)
{
//stuff
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想强制说T是可空的,所以我可以使用类:
//does stuff
new Test<int?>(3).DoStuff();
//doesn't do stuff
new Test<int?>(null).DoStuff();
Run Code Online (Sandbox Code Playgroud)
你不能强制它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
}
}
}
Run Code Online (Sandbox Code Playgroud)
另一个特点是你不能限制T
为任何可以为空的类型,包括引用类型 - 同样,你不能约束T
为任何值类型,包括可空值类型.该where T : class
限制只适用于类(包括委托类型)和接口,以及where T : struct
约束只与非空值类型(包括枚举).