C# 泛型指针
为什么在C#中使用泛型类型指针无效C# 泛型指针,c#,pointers,generics,C#,Pointers,Generics,为什么在C#中使用泛型类型指针无效int?*无效,而typeof(int?).MakePointerType()不会产生异常 根据,指针可以是: sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal或bool 任何枚举类型 任何指针类型 仅包含非托管类型字段的任何用户定义的结构类型 我看不出与泛型相关的任何限制int?看起来有效,因为它只包含bool和int字段。引用C#5.0规范§18.2指针类型 与引用(引
int?*
无效,而typeof(int?).MakePointerType()
不会产生异常
根据,指针可以是:
sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal或bool
任何枚举类型
任何指针类型
仅包含非托管类型字段的任何用户定义的结构类型
我看不出与泛型相关的任何限制int?
看起来有效,因为它只包含bool
和int
字段。引用C#5.0规范§18.2指针类型
与引用(引用类型的值)不同,指针不是
由垃圾回收器跟踪垃圾回收器没有
指针及其指向的数据的知识。为此
原因不允许指针指向引用或
包含引用的结构,以及指针的引用类型
必须是非托管类型
非托管类型是非托管类型的任何类型
引用类型或构造类型,不包含引用类型
或在任何嵌套级别构造类型字段。换句话说,一个
非托管类型是以下类型之一:
- sbyte,byte,short,ushort, int、uint、long、ulong、char、float、double、decimal或bool
- 任何 枚举类型
- 任何指针类型
- 任何用户定义的结构类型 不是构造类型,仅包含非托管类型的字段
构造类型
限制
根据§1.6.3类型参数(强调矿山)
提供了类型参数的泛型类型,如上面的Pair
,称为构造类型
指定类型参数的任何泛型类型都被视为构造类型,并且构造类型不允许位于指针中。这就是为什么
Nullable
是不允许的。好吧,MSDN可能忘了列出这一点,但我感兴趣的是为什么它决定不允许泛型类型。因此,您只能希望看到您的问题并作出响应,但除此之外,您不太可能得到“为什么”的答案。编辑:但是有一条线索可能是