Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#nameof运算符是否可以在没有实例的情况下引用实例属性?_C#_C# 6.0_Nameof - Fatal编程技术网

C#nameof运算符是否可以在没有实例的情况下引用实例属性?

C#nameof运算符是否可以在没有实例的情况下引用实例属性?,c#,c#-6.0,nameof,C#,C# 6.0,Nameof,当我没有实例时,我通常希望获取类型的实例属性的名称。目前,我使用以下内部函数来解释表达式[Func[T,object]]参数并返回属性名: var str = LinqExtensions.NameOf<ClientService>(x => x.EndDate); // Now str == "EndDate" 编辑 我完全错了,语法nameof(ClientService.EndDate)实际上是按原样工作的。过去,文档明确解释了这一点,部分阅读: 在示例中,您可以看到可

当我没有实例时,我通常希望获取类型的实例属性的名称。目前,我使用以下内部函数来解释
表达式[Func[T,object]]
参数并返回属性名:

var str = LinqExtensions.NameOf<ClientService>(x => x.EndDate);
// Now str == "EndDate"
编辑


我完全错了,语法
nameof(ClientService.EndDate)
实际上是按原样工作的。

过去,文档明确解释了这一点,部分阅读:

在示例中,您可以看到可以使用类型名并访问实例方法名。您不需要有类型的实例…[emphasis mine]

这一点在本文中被省略了。然而,这些例子仍然清楚地表明了这一点。代码示例,例如Console.WriteLine(nameof(List.Count));//输出:Count
控制台.WriteLine(nameof(List.Add));//输出:Add
显示如何使用
nameof
获取带有类实例成员名称的
字符串

也就是说,您应该能够编写
nameof(ClientService.EndDate)
并让它工作,这与您在问题中观察到的“通常语法无效”相反


如果您在语法方面遇到问题,请提供一个能够可靠地再现您所遇到的任何错误的好方法,并提供错误消息的确切文本。

彼得·杜尼霍的精彩回答

如果名称冲突,还可以执行以下操作:

ClientService clientservice;
var str = nameof(clientservice.EndDate);

效率不高,但很有趣。

它只起作用-
类C{public int p{get;}
-
名称(C.p)
编译得很好。你能发布你的内部函数吗?在名称冲突的情况下,两个名称将解析为相同的文本,因此可能不存在冲突matter@AndrewHill这是个坏主意,因为使用
nameof
的一半原因是这样做的IDE重构(重命名变量)不会在文本字符串中遗漏,通过在另一个类上执行
nameof
,您再次引入了这种机会。我收到了代码检查通知“局部变量仅用于捕获其名称”
ClientService clientservice;
var str = nameof(clientservice.EndDate);