Почему я не могу использовать структуру, которая является полем класса в фиксированной инструкции? - PullRequest
0 голосов
/ 09 июля 2019

В этом коде я хочу создать указатель из типа 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;
    }

Я не понимаю, почему показывает мне эту ошибку. все выглядит нормально? Кто-нибудь может объяснить, что происходит в этом коде?

1 Ответ

1 голос
/ 09 июля 2019

Вы не можете использовать свойство в контексте оператора fixed.Если вы превратите свойство MyStruct в поле, оно будет работать.

unsafe class Test
{
    public int a;
    public MyStruct MyStruct = new MyStruct();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...