鏈方法在.NET中,你可以鏈方法返回一個值或使用無效。他們中的一個是「正確的方式」嗎?什麼是正確的方式在.net
所以你可以說
1)
Foo myFoo = new Foo();
myfoo.Bars =
myBars.DoSomethingCool(x)
.DoSomethingElse(y)
.AndSomethingElse(z);
public static IList<IBar> DoSomethingCool(this IList<IBar> source, object x)
{
IList<IBar> result = //some fn(source)
return result;
}
在這種情況下,所有3種擴展方法需要返回的IList(用於myFoo.Bars類型)
,或者也可能是寫爲
2)
myBars.DoSomethingCool(x)
.DoSomethingElse(y)
.AndSomethingElse(z);
public static void DoSomethingCool(this IList<IBar> source, object x)
{
//Modify source
source = //some fn(source)
//Don't return anything
}
在這種情況下,擴展方法返回一個空白,但這樣做在未來源對象的工作?
UPDATE西蒙在他的回答中是正確的,2)不會編譯。下面是如何重寫:
DoSomethingCool(myBars)
.DoSomethingElse(myBars)
.AndSomethingElse(myBars);
myBars然後將在每個方法的調用內部進行更改,並且方法將返回void。
鏈接方法好得多使得代碼更難調試,修改和維護。 –
我不確定我是否理解它如何使調試,修改和維護變得更加困難。如果你把鏈接放在不同的行上,你可以在任何語句中設置一個斷點。鏈接使得它更容易表達意圖,這在我看來使維護更容易,而不是更難。 – John
你的第二個例子不會編譯。 DoSomethingElse()在DoSomethingCool的返回結果上被調用,這是一個void。 – sisve