为什么这个表达式有效? (C#6.0)

时间:2018-03-23 07:50:32

标签: c# c#-6.0 nameof

nameof(ServiceResult<object>.Result),其中ServiceResult<object>是我的自定义类型,Result是此类型的字段。 ServiceResult<object>只是一个类型声明,它没有operator new和(),但MS的官方页面说nameof接受变量及其成员。 为什么此表达式有效?我之前没有看到这样的声明。

1 个答案:

答案 0 :(得分:5)

您提到的规范可能是旧的,C#6.0 nameof运营商参考:

state here

  

nameof的参数必须是简单名称,限定名称,成员访问权限,具有指定成员的基本访问权限,或具有指定成员的此访问权限。参数表达式标识代码定义,但永远不会对其进行评估。

在你的情况下,这是一个表达。与

类似

nameof(C.Method2) -> "Method2"

来自该文章中的示例列表。

<强>实施例

using Stuff = Some.Cool.Functionality  
class C {  
    static int Method1 (string x, int y) {}  
    static int Method1 (string x, string y) {}  
    int Method2 (int z) {}  
    string f<T>() => nameof(T);  
}  

var c = new C()  

nameof(C) -> "C"  
nameof(C.Method1) -> "Method1"   
nameof(C.Method2) -> "Method2"  
nameof(c.Method1) -> "Method1"   
nameof(c.Method2) -> "Method2"  
nameof(z) -> "z" // inside of Method2 ok, inside Method1 is a compiler error  
nameof(Stuff) = "Stuff"  
nameof(T) -> "T" // works inside of method but not in attributes on the method  
nameof(f) -> "f"  
nameof(f<T>) -> syntax error  
nameof(f<>) -> syntax error  
nameof(Method2()) -> error "This expression does not have a name"