C# 为什么我不能在固定语句中使用作为类字段的结构?
在这段代码中,我想从MyStruct类型创建一个指针,但编译器向我显示了以下错误:“您不能获取给定表达式的地址”。 这是我的密码:C# 为什么我不能在固定语句中使用作为类字段的结构?,c#,.net,pointers,C#,.net,Pointers,在这段代码中,我想从MyStruct类型创建一个指针,但编译器向我显示了以下错误:“您不能获取给定表达式的地址”。 这是我的密码: unsafe class Program { static void Main(string[] args) { Test test = new Test(); //Error: You cannot take the address of given expression
unsafe class Program
{
static void Main(string[] args)
{
Test test = new Test();
//Error: You cannot take the address of given expression
fixed (MyStruct* ms = &test.MyStruct)
{
}
fixed (int* a = &test.a) //Is OK
{
}
}
}
unsafe class Test
{
public int a;
public MyStruct MyStruct { get; set; } = new MyStruct();
}
unsafe struct MyStruct
{
public int A;
public fixed int Ids[5];
public int B;
}
我不明白为什么我会看到这个错误。一切看起来还好吧?
有人能解释一下这段代码中发生了什么吗?您不能在fixed语句的上下文中使用属性。如果将
MyStruct
属性转换为一个字段,它将起作用
unsafe class Test
{
public int a;
public MyStruct MyStruct = new MyStruct();
}
原因是属性基本上只是方法,即使像这里这样的自动属性有一个支持字段,编译器也不容易知道方法中发生了什么。