我最近无意中写下了以下声明。
MyCollection myCollection = new MyCollection();
SomeMethod(myCollection.SomeVoidOperation());
愚蠢的是,我花了一些时间才弄清楚为什么它不起作用(有一个脑屁),但后来它让我思考;为什么这样的语句在任何通用 C 类型语法上下文中实际上都是无效的?
我知道我可以通过方法链接来完成相同的功能,但我不明白的是为什么这样的功能没有(或者可能不能)实现?对我来说,意图似乎很明确,并且我已经尝试过,但我看不出它可能会产生任何歧义。我确信有一些很好的理由(或者我遗漏的东西),希望有人能向我指出。
那么,为什么不能进行手术 作为作业的一部分执行?
更新:
我明白为什么这不起作用。 IE:我有一个需要一些参数的方法,并且我正在调用一个不返回任何内容的方法 - 但你没有理解我的观点......我将该代码视为两个语句,一个是 myCollection (IE:一个实例)和第二个是“调用这个方法”。
这是一个更完整的示例:
public class Stock
{
public Guid ID { get; set; }
public string Description { get; set; }
}
public class StockList : List<Stock>
{
public void SomeSortOperation() { }
}
public void SomeMethod(StockList stockList)
{
}
StockList myList = new StockList();
SomeMethod(myList.SomeSortOperation());
它看起来就像你试图使用
SomeVoidOperation
的结果作为方法参数(大概是没有参数的方法) - 但大概你不是,因为它是一个void方法。
让代码看起来好像在做一件事,而实际上在做另一件事,这绝对不是一个好主意。
编辑:好的,不,看到编辑后,我仍然不认为这是一个好主意。您基本上是说,如果您尝试使用 void 表达式作为方法参数,它实际上应该根据表达式使用一些不同的值。该表达式必须非常仔细地定义......例如,would:
Foo(x.MethodReturningBar().MethodReturningVoid());
考虑参数是
x
的类型,还是
Bar
(中间方法调用的返回类型)?再次,您编写的代码
看起来像是在做一件事(使用整个表达式的值作为参数),而它实际上在做其他事情(使用部分表达式的值作为参数) 。这根本就是个坏主意。
SomeVoidOperation() 该操作不返回任何值 (void):
您不能向期望获得某些内容的方法传递任何内容。您无法将任何内容强制转换为SomeMethod() 期望获得的类型。