1. 程式人生 > 其它 >通過ref返回解決C# struct結構體鏈式呼叫的問題

通過ref返回解決C# struct結構體鏈式呼叫的問題

通常結構體不能進行鏈式呼叫,因為返回值會建立一個新的結構體。

結構體:

public struct Foo
{
    public int a;


    public Foo AddOne()
    {
        a++;

        return this;
    }

    public Foo AddTwo()
    {
        a += 2;

        return this;
    }
}

執行測試:

Foo foo = new Foo();
foo
    .AddOne()
    .AddTwo();

Debug.Log(foo.a);
//1(錯誤)

那麼藉助c#新的ref關鍵字,我們可以引用返回結構:

public ref Foo AddOne()
{
    a++;

    return ref this;/*ref不能返回this*/
}

但是編譯器不能通過,沒關係,可以通過擴充套件方法實現。

擴充套件方法實現ref返回:

結構:

public struct Foo
{
    public int a;


    public void AddOne()
    {
        a++;
    }

    public void AddTwo()
    {
        a += 2;
    }
}

擴充套件方法:

public static class FooExtensions
{
    public static ref Foo AddOneRef(this ref Foo foo)
    {
        foo.AddOne();
        return ref foo;
    }
    
    public static ref Foo AddTwoRef(this ref Foo foo)
    {
        foo.AddTwo();
        return ref foo;
    }
}

呼叫測試:

Foo foo = new
Foo(); foo .AddOneRef() .AddTwoRef(); Debug.Log(foo.a); //3

可見,結果正確。