为什么操作无法作为任务的一部分执行

时间:2011-05-27 09:56:48

标签: c# compiler-construction programming-languages syntax

我最近偶然写下了以下陈述。

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());

3 个答案:

答案 0 :(得分:4)

看起来就像你试图将SomeVoidOperation的结果用作方法参数(大概是一个没有参数的方法) - 但可能你不是,因为它是虚空方法。

代码看起来从来就不是一个好主意,就像它正在做一件事,当它实际上正在做另一件事时。

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

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

将参数视为xBar的类型(中间方法调用的返回类型)?

同样,当你实际做其他事情时,你正在编写看起来的代码,就像它正在做一件事(使用整个表达式的值作为参数)(使用表达式的一部分值作为参数)。这简直是​​一个坏主意。

答案 1 :(得分:0)

如果您的意思是 SomeVoidOperation(),则该操作不返回任何值(void):

您不能将任何内容传递给期望得到某些东西的方法。你不能在 SomeMethod()期望得到的类型上投入任何东西。

答案 2 :(得分:0)

我相信您应该稍微回溯并尝试先了解void类型。请参阅此答案C# void type- safety。我相信这会让你更深入地了解为什么你要做的事情不起作用。