Подтвердить что ты не робот

Передать С# struct по ссылке?

В моем приложении С# я получаю указатель на С++ struct в callback/delegate. Я не уверен, что class может сделать трюк, но просто приведение указателя С++ к соответствующей структуре С# отлично работает, поэтому я использую С# struct для хранения данных.

Теперь я хочу передать ссылку на struct для дальнейшей обработки

  • Я не могу использовать class, потому что он, вероятно, не "отлично" сопоставит с конструкцией С++.
  • Я не хочу копировать структуру для лучшей задержки

Как я могу это сделать?


В этом примере показано, что struct передается по значению, а не по ссылке:

using System;

namespace TestStruct
{
    struct s
    {
        public int a;
    }

    class Program
    {
        static void Main(string[] args)
        {
            s s1 = new s
                       {
                           a = 1
                       };
            Foo(s1);
            Console.WriteLine("outer a = " + s1.a);
        }

        private static void Foo(s s1)
        {
            s1.a++;
            Console.WriteLine("inner a = " + s1.a);
        }

    }
}

Выход:

inner a = 2
outer a = 1
4b9b3361

Ответ 1

Похоже, вы просто хотите использовать ref для передачи структуры по ссылке:

private static void Foo(ref s s1)
{
    s1.a++;
    Console.WriteLine("inner a = " + s1.a);
}

И на сайте вызова:

Foo(ref s1);

Подробнее о статье о передаче параметров в С#.

Обратите внимание, что, кроме interop, я бы настоятельно рекомендовал против использования изменяемых структур, подобных этому. Однако я могу понять преимущества здесь.