这可以解释为C#中的调用表达式吗?

时间:2015-03-20 22:41:18

标签: c# syntax

根据C#语法,可以写

(A)(B)

可以解释为调用表达式或类型转换。 有人可以提供一个有效的C#示例,将此案例解释为调用表达式吗?

这是我所指的语法规则:

invocation-expression:
    primary-expression   (   argument-list?   )

primariy-expression可以是带括号的表达式。

2 个答案:

答案 0 :(得分:4)

喜欢这个吗?

((Action<string>)Console.WriteLine)("test");

或者,这是一个表达式:

((Func<int>)Console.Read)()

编辑:我怀疑primary-expression是否有办法成为一个简单的标识符,因为它总是被解析为强制转换(偶数(writeLine)()),但它不是这很重要,因为你总是可以删除括号。

答案 1 :(得分:1)

似乎Visual Studio抱怨这个:(TestMethod)();

但是这被评估为一个函数调用(假设TestMethod是一个方法):(this.TestMethod)();

除非TestMethod是静态的,否则即使(MyClass.TestMethod)();也不起作用。

我认为这是因为像this.TestMethod这样的东西明确地评估了一个方法组。没有this.anything评估某种类型的情况。但是classname.something可以是嵌套类型,或者它可以是静态方法,因此VS似乎将其解释为类型。