Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 泛型指针_C#_Pointers_Generics - Fatal编程技术网

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指针类型 与引用(引

为什么在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指针类型

与引用(引用类型的值)不同,指针不是 由垃圾回收器跟踪垃圾回收器没有 指针及其指向的数据的知识。为此 原因不允许指针指向引用或 包含引用的结构,以及指针的引用类型 必须是非托管类型

非托管类型是非托管类型的任何类型 引用类型或构造类型,不包含引用类型 或在任何嵌套级别构造类型字段。换句话说,一个 非托管类型是以下类型之一:

  • sbyte,byte,short,ushort, int、uint、long、ulong、char、float、double、decimal或bool
  • 任何 枚举类型
  • 任何指针类型
  • 任何用户定义的结构类型 不是构造类型,仅包含非托管类型的字段
阻止您的关键部分是
构造类型
限制

根据§1.6.3类型参数(强调矿山)

提供了类型参数的泛型类型,如上面的
Pair
称为构造类型


指定类型参数的任何泛型类型都被视为构造类型,并且构造类型不允许位于指针中。这就是为什么
Nullable
是不允许的。

好吧,MSDN可能忘了列出这一点,但我感兴趣的是为什么它决定不允许泛型类型。因此,您只能希望看到您的问题并作出响应,但除此之外,您不太可能得到“为什么”的答案。编辑:但是有一条线索可能是