在 C# 中使用unsafe
orfixed
关键字时,您可以定义指向非托管类型的指针,例如byte*
int*
等。您还可以定义指向仅包含非托管类型的任何结构的指针,例如:
namespace a
{
struct MyStruct
{
int value1;
int value2;
}
class b<T>
{
unsafe void SomeMethod()
{
MyStruct* ptr;
}
}
}
但是,如果在泛型类定义中定义,我会得到struct
error 。这种限制的原因是什么?CS0208: Cannot take the address of, get the size of, or declare a pointer to a managed type
更新:仅当包含类是泛型时才会发生此错误。我仍然看不出错误的原因 - 编译器可以看到该结构将始终包含非托管类型,因为它不引用泛型类型T
。
namespace a
{
class b<T>
{
struct MyStruct
{
int value1;
int value2;
}
unsafe void SomeMethod()
{
MyStruct* ptr; // gives a compiler error
}
}
}
注意:在最终版本中,此功能似乎已添加到 C#:请参阅GitHub 上的此问题。