向大家致以问候.对不起,如果以前已经问过这个问题(徒劳无功),或者说非常简单,但我无法得到它.Nullable类型的MSDN定义声明它是以下列方式定义的:
[SerializableAttribute]
public struct Nullable<T>
where T : struct, new()
Run Code Online (Sandbox Code Playgroud)
所以问题非常简单:这个定义怎么可能?或者这只是一个错字?每个值类型都有一个默认构造函数.实际上,当我尝试编译这样的东西时,编译器合理地说,同时应用两个约束是非法的,因为第二个隐含地包含在第一个约束中.
提前致谢.
Tho*_*que 12
我认为这只是文档中的一个错误.如果查看Nullable<T>Reflector 中的类型或使用VS中的"Go To Definition"命令,它只显示struct约束.
编辑
我正在考虑这个问题,我做了一点测试:
var attributes = typeof(Nullable<>).GetGenericArguments()[0].GenericParameterAttributes;
Console.WriteLine(attributes);
Run Code Online (Sandbox Code Playgroud)
此代码生成以下输出:
NotNullableValueTypeConstraint,DefaultConstructorConstraint
所以根据反射,Tin Nullable<T> 确实有new()约束...这意味着即使它在C#中无效,它也必须对CLR有效.
所以文档是正确的和错误的:确实Tin Nullable<T>有"默认构造函数"约束,但它显示的C#声明是错误的......
这实际上并不令人惊讶,因为文档是从程序集元数据(当然还有XML注释)生成的.文档生成器中必定存在错误...