.Netでは、値を返すメソッドを連鎖するか、voidを使用して連鎖させることができます。そのうちの1つは「正しい方法」ですか?.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
}
01として書き込ま
この場合、拡張メソッドはvoidを返しますが、入ってくるソースオブジェクトに対して作業を行いますか?
UPDATEサイモンは、2)はコンパイルされないとの彼の答えで正しいです。ここではそれは書き換えることができる方法である:
DoSomethingCool(myBars)
.DoSomethingElse(myBars)
.AndSomethingElse(myBars);
myBarsは、各メソッドの呼び出し内で変更されるだろうとの方法はvoidを返すことになります。
よりもはるかに進歩していたコードのデバッグに難しく、修正し、維持することができます。 –
デバッグ、修正、メンテナンスの難しさを理解しているかどうかはわかりません。チェーニングを別々の行に置くと、いずれかのステートメントにブレークポイントを設定できます。連鎖することで意図を表現するのが容易になり、保守を簡単にすることが難しくないように見えます。 – John
2番目の例はコンパイルされません。 DoSomethingElse()はDoSomethingCoolの戻り値に対して呼び出されます。これは無効です。 – sisve