34

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

现在我想传递对 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
4

1 回答 1

55

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

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

在通话现场:

Foo(ref s1);

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

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

于 2013-05-17T17:22:18.517 回答