通過ref返回解決C# struct結構體鏈式呼叫的問題
阿新 • • 發佈:2021-11-09
通常結構體不能進行鏈式呼叫,因為返回值會建立一個新的結構體。
結構體:
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 = newFoo(); foo .AddOneRef() .AddTwoRef(); Debug.Log(foo.a); //3
可見,結果正確。