为什么这个表达有效?(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.0nameof
操作员参考:
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
。它不会创建任何符号类型的实例,也不会检查其值。感谢您的帮助。这就解释了一切。非常感谢。