根据C#语法,可以写
(A)(B)
可以解释为调用表达式或类型转换。 有人可以提供一个有效的C#示例,将此案例解释为调用表达式吗?
这是我所指的语法规则:
invocation-expression:
primary-expression ( argument-list? )
和primariy-expression
可以是带括号的表达式。
答案 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似乎将其解释为类型。