在我的c#应用程序中,我在callback / delegate中收到指向c ++ struct的指针。我不确定class
是否可以做到这一点,但只是将c ++指针转换为适当的c#struct工作正常,所以我使用c#struct来存储数据。
现在我想传递对struct的引用以进行进一步处理
class
,因为它可能不会“完美地”映射到c ++ 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
答案 0 :(得分:46)
听起来您只想使用ref
通过引用传递结构:
private static void Foo(ref s s1)
{
s1.a++;
Console.WriteLine("inner a = " + s1.a);
}
在通话现场:
Foo(ref s1);
有关详细信息,请参阅我的article on parameter passing in C#。
请注意,除了互操作之外,我通常强烈建议使用像这样的可变结构反对。我可以理解这里的好处。