为什么操作不能作为作业的一部分来执行

问题描述 投票:0回答:3

我最近无意中写下了以下声明。

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());
c# syntax programming-languages
3个回答
4
投票

看起来就像你试图使用

SomeVoidOperation
的结果作为方法参数(大概是没有参数的方法) - 但大概你不是,因为它是一个void方法。

让代码看起来好像在做一件事,而实际上在做另一件事,这绝对不是一个好主意。

编辑:好的,不,看到编辑后,我

仍然不认为这是一个好主意。您基本上是说,如果您尝试使用 void 表达式作为方法参数,它实际上应该根据表达式使用一些不同的值。该表达式必须非常仔细地定义......例如,would:

Foo(x.MethodReturningBar().MethodReturningVoid());

考虑参数是

x

的类型,还是
Bar
(中间方法调用的返回类型)?

再次,您编写的代码

看起来像是在做一件事(使用整个表达式的值作为参数),而它实际上在做其他事情(使用部分表达式的值作为参数) 。这根本就是个坏主意。


0
投票
如果您的意思是

SomeVoidOperation() 该操作不返回任何值 (void):

您不能向期望获得某些内容的方法传递任何内容。您无法将任何内容强制转换为

SomeMethod() 期望获得的类型。


0
投票
我相信你应该回溯一下,首先尝试理解

void

 类型。请参阅这个答案
C# void type- safety。我相信这会让您更深入地了解为什么您尝试做的事情不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.