C# nameof 运算符可以在没有实例的情况下引用实例 属性 吗?
Can C# nameof operator reference instance property without instance?
当我没有实例时,我经常想获取类型实例的名称 属性。目前要做到这一点,我使用以下内部函数来解释 Expression[Func[T, object]]
参数和 returns 属性 名称:
var str = LinqExtensions.NameOf<ClientService>(x => x.EndDate);
// Now str == "EndDate"
然而,不使用内置的 nameof
运算符似乎很遗憾。
不幸的是,nameof
运算符似乎需要实例,或者引用静态属性。
是否有使用 nameof
运算符代替我们内部函数的巧妙方法?例如:
nameof(ClientService.EndDate) // ClientService.EndDate not normally syntactically valid as EndDate is instance member
编辑
我完全错了,所描述的语法 nameof(ClientService.EndDate)
实际上按原样工作。
过去,文档明确解释了这一点,部分阅读:
In the examples you see that you can use a type name and access an instance method name. You do not need to have an instance of the type… [emphasis mine]
这在the current documentation中被省略了。然而,这些例子仍然清楚地说明了这一点。 Console.WriteLine(nameof(List<int>.Count)); // output: Count
和 Console.WriteLine(nameof(List<int>.Add)); // output: Add
等代码示例显示了如何使用 nameof
获取具有 class 的实例成员名称的 string
值。
即你应该能够写 nameof(ClientService.EndDate)
并让它工作,这与你在问题中的观察相反,这将是 “通常在句法上无效”.
如果您在语法方面遇到问题,请提供一个好的 Minimal, Complete, and Verifiable code example 可以可靠地重现您遇到的任何错误,并提供 准确的 文本错误信息。
@Peter Duniho 的回答很棒。
如果名称冲突,您还可以执行以下操作:
ClientService clientservice;
var str = nameof(clientservice.EndDate);
效率不高,但足够好奇。
当我没有实例时,我经常想获取类型实例的名称 属性。目前要做到这一点,我使用以下内部函数来解释 Expression[Func[T, object]]
参数和 returns 属性 名称:
var str = LinqExtensions.NameOf<ClientService>(x => x.EndDate);
// Now str == "EndDate"
然而,不使用内置的 nameof
运算符似乎很遗憾。
不幸的是,nameof
运算符似乎需要实例,或者引用静态属性。
是否有使用 nameof
运算符代替我们内部函数的巧妙方法?例如:
nameof(ClientService.EndDate) // ClientService.EndDate not normally syntactically valid as EndDate is instance member
编辑
我完全错了,所描述的语法 nameof(ClientService.EndDate)
实际上按原样工作。
过去,文档明确解释了这一点,部分阅读:
In the examples you see that you can use a type name and access an instance method name. You do not need to have an instance of the type… [emphasis mine]
这在the current documentation中被省略了。然而,这些例子仍然清楚地说明了这一点。 Console.WriteLine(nameof(List<int>.Count)); // output: Count
和 Console.WriteLine(nameof(List<int>.Add)); // output: Add
等代码示例显示了如何使用 nameof
获取具有 class 的实例成员名称的 string
值。
即你应该能够写 nameof(ClientService.EndDate)
并让它工作,这与你在问题中的观察相反,这将是 “通常在句法上无效”.
如果您在语法方面遇到问题,请提供一个好的 Minimal, Complete, and Verifiable code example 可以可靠地重现您遇到的任何错误,并提供 准确的 文本错误信息。
@Peter Duniho 的回答很棒。
如果名称冲突,您还可以执行以下操作:
ClientService clientservice;
var str = nameof(clientservice.EndDate);
效率不高,但足够好奇。