簡體   English   中英

通過引用傳遞c#struct?

[英]pass c# struct by reference?

在我的c#應用程序中,我在callback / delegate中收到指向c ++ struct的指針。 我不確定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#中傳遞參數的文章

請注意,除了互操作之外,我通常強烈建議不要使用像這樣的可變結構。 我可以理解這里的好處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM