这可以解释为 C# 中的调用表达式吗?
Can this be interpreted as an invocation expression in C#?
根据C#语法,可以这样写
(A)(B)
可以解释为调用表达式或类型转换。
有人可以提供一个将这种情况解释为调用表达式的有效 C# 示例吗?
这是我指的语法规则:
invocation-expression:
primary-expression ( argument-list? )
和primariy-expression
可以是括号表达式。
像这样?
((Action<string>)Console.WriteLine)("test");
或者这个,作为一个表达式:
((Func<int>)Console.Read)()
编辑: 我怀疑是否有办法让 primary-expression
成为一个简单的标识符,因为它总是被解析为强制转换(甚至 (writeLine)()
),但这没什么大不了的,因为您始终可以删除括号。
似乎Visual Studio抱怨这个:(TestMethod)();
但这被评估为一个函数调用(假设 TestMethod 是一个方法):(this.TestMethod)();
除非 TestMethod 是静态的,在这种情况下甚至 (MyClass.TestMethod)();
也不起作用。
我认为这是因为像 this.TestMethod
这样的东西明确地评估了一个方法组。没有 this.anything
会评估为类型的情况。但是 classname.something
可能是嵌套类型,也可能是静态方法,所以 VS 似乎将其解释为类型。
根据C#语法,可以这样写
(A)(B)
可以解释为调用表达式或类型转换。 有人可以提供一个将这种情况解释为调用表达式的有效 C# 示例吗?
这是我指的语法规则:
invocation-expression:
primary-expression ( argument-list? )
和primariy-expression
可以是括号表达式。
像这样?
((Action<string>)Console.WriteLine)("test");
或者这个,作为一个表达式:
((Func<int>)Console.Read)()
编辑: 我怀疑是否有办法让 primary-expression
成为一个简单的标识符,因为它总是被解析为强制转换(甚至 (writeLine)()
),但这没什么大不了的,因为您始终可以删除括号。
似乎Visual Studio抱怨这个:(TestMethod)();
但这被评估为一个函数调用(假设 TestMethod 是一个方法):(this.TestMethod)();
除非 TestMethod 是静态的,在这种情况下甚至 (MyClass.TestMethod)();
也不起作用。
我认为这是因为像 this.TestMethod
这样的东西明确地评估了一个方法组。没有 this.anything
会评估为类型的情况。但是 classname.something
可能是嵌套类型,也可能是静态方法,所以 VS 似乎将其解释为类型。