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