.Net では、値を返すメソッド、または void を使用してメソッドを連鎖できます。それらの1つは「正しい方法」ですか?
だからあなたは言うことができます
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
}
その場合、拡張メソッドは void を返しますが、入ってくるソース オブジェクトに対して作業を行いますか?
UPDATEサイモンは、2)コンパイルされないという彼の答えで正しかった。これを書き直すと次のようになります。
DoSomethingCool(myBars)
.DoSomethingElse(myBars)
.AndSomethingElse(myBars);
myBars は各メソッドの呼び出し内で変更され、メソッドは void を返します。