В .Net вы можете связывать методы, возвращающие значение, или используя void. Является ли один из них «правильным путем»?
Так что вы могли бы сказать
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
}
в этом случае методы расширения возвращают пустоту, но выполняют ли работу входящий исходный объект?
ОБНОВЛЕНИЕ В своем ответе Саймон был прав, что 2) не скомпилируется. Вот как это можно переписать:
DoSomethingCool(myBars)
.DoSomethingElse(myBars)
.AndSomethingElse(myBars);
myBars будет меняться внутри вызова каждого метода, а методы будут возвращать void.