Передать С# 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
Ответы
Ответ 1
Похоже, вы просто хотите использовать ref
для передачи структуры по ссылке:
private static void Foo(ref s s1)
{
s1.a++;
Console.WriteLine("inner a = " + s1.a);
}
И на сайте вызова:
Foo(ref s1);
Подробнее о статье о передаче параметров в С#.
Обратите внимание, что, кроме interop, я бы настоятельно рекомендовал против использования изменяемых структур, подобных этому. Однако я могу понять преимущества здесь.