在 .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
}
在这种情况下,扩展方法返回一个 void,但是对进来的源对象做些什么呢?
更新Simon 在他的回答中是正确的 2) 不会编译。这是如何重写的:
DoSomethingCool(myBars)
.DoSomethingElse(myBars)
.AndSomethingElse(myBars);
然后 myBars 将在每个方法的调用中发生变化,并且这些方法将返回 void。