在C#中,Nullable< T> type不满足where struct generic约束(而AFAK这在技术上是一个struct).这可用于指定泛型参数必须是不可为空的值类型:
T DoSomething<T>() where T : struct
{
//...
}
DoSomething<int?>(); //not ok
DoSomething<int>(); //ok
当然,Nullable< T>也不满足类约束的引用类型:
T DoSomething<T>() where T : class
{
//...
}
DoSomething<int?>(); //not ok
DoSomething<Foo>(); //ok
这是否可以定义约束,例如它必须是引用类型或值类型但不是Nullable值类型?
像这样的东西:
void DoSomething<T>() where T : class, struct //wont compile!
{
//...
}
DoSomething<int?>(); //not ok
DoSomething<int>(); //ok
DoSomething<Foo>(); //ok
解决方法:
不,在宣言方面是不可能的.它是结构OR类.
但是,您可以在运行时检查typeof(T)以确保T为Nullable< T2>.
Type type = typeof(T);
if(Nullable.GetUnderlyingType(type) == null)
throw new Exception();