C# 为什么我不能在固定语句中使用作为类字段的结构?

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

在这段代码中,我想从MyStruct类型创建一个指针,但编译器向我显示了以下错误:“您不能获取给定表达式的地址”。 这是我的密码:

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();
}

原因是属性基本上只是方法,即使像这里这样的自动属性有一个支持字段,编译器也不容易知道方法中发生了什么。