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

为什么这个表达有效?(C#6.0),c#,c#-6.0,nameof,C#,C# 6.0,Nameof,nameof(servicesult.Result),其中servicesult是我的自定义类型,Result是此类型的字段ServiceResult只是一个类型声明,它没有运算符new和(),但MS的官方页面显示nameof接受变量及其成员为什么此表达式有效?我以前没有见过这样的声明。您提到的规范可能是一个旧规范,C#6.0nameof操作员参考: nameof的参数必须是简单名称、限定名称、成员访问权限、具有指定成员的基本访问权限或具有指定成员的此访问权限。参数表达式标识代码定义,但从未对

nameof(servicesult.Result)
,其中
servicesult
是我的自定义类型,
Result
是此类型的字段
ServiceResult
只是一个类型声明,它没有运算符new和(),但MS的官方页面显示
nameof
接受变量及其成员为什么此表达式有效?我以前没有见过这样的声明。

您提到的规范可能是一个旧规范,C#6.0
nameof
操作员参考:

nameof
的参数必须是简单名称、限定名称、成员访问权限、具有指定成员的基本访问权限或具有指定成员的此访问权限。参数表达式标识代码定义,但从未对其求值

在你的例子中,这是一个表达式。近似

name of(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"
使用Stuff=Some.Cool.Functionality
C类{
静态int Method1(字符串x,int y){}
静态int Method1(字符串x,字符串y){}
int Method2(int z){}
字符串f()=>nameof(T);
}  
var c=新的c()
姓名(C)->“C”
名称(C.Method1)->“Method1”
名称(C.Method2)->“Method2”
名称(c.Method1)->“Method1”
名称(c.Method2)->“Method2”
nameof(z)->“z”//Method2内部正常,Method1内部是编译器错误
名称(Stuff)=“Stuff”
nameof(T)->“T”//在方法内部工作,但不在方法的属性中工作
名称(f)->“f”
nameof(f)->语法错误
nameof(f)->语法错误
nameof(Method2())->错误“此表达式没有名称”

您可以在这里找到答案
nameof
返回编译时符号的名称。在这种情况下,符号为
Result
。它不会创建任何符号类型的实例,也不会检查其值。感谢您的帮助。这就解释了一切。非常感谢。