通过引用传递c#struct?

在我的c#应用程序中,我在callback / delegate中收到指向c ++结构的指针。 我不确定class可以做到这一点,但只是将c ++指针转换为适当的c#struct工作正常,所以我使用c#struct来存储数据。

现在我想传递对struct的引用以进行进一步处理

  • 我不能使用class因为它可能不会完美地“映射”到c ++ struct。
  • 我不想复制struct以获得更好的延迟

我怎样才能做到这一点?


此示例演示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 

听起来你只想使用ref通过引用传递结构:

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

在通话现场:

 Foo(ref s1); 

有关更多详细信息,请参阅我在C#中传递参数的文章 。

请注意,除了互操作之外,我通常强烈建议不要使用像这样的可变结构。 我可以理解这里的好处。