能否在编译时无需实例化对象获取类的属性名称?
能否在编译时无需实例化对象获取类的属性名称?
答案是完全可以!你提到的nameof()其实本身就支持在不实例化对象的前提下,直接获取类的属性名称,而且同样是编译时完成的操作。
先看你给出的需要实例化的写法:
class DummyClass { public int DummyProperty { get; set; } } void Meth() { // With instantiation var dc = new DummyClass(); var prname = nameof(dc.DummyProperty); }
而无需实例化的写法更简单,直接通过类名访问属性即可:
class DummyClass { public int DummyProperty { get; set; } } void Meth() { // Without instantiation, compile-time evaluation var prname = nameof(DummyClass.DummyProperty); }
关键说明:
nameof()是编译时求值的运算符,它不需要运行时的对象实例,编译器在编译阶段就会将nameof(TypeName.MemberName)替换为对应的字符串常量(这里就是"DummyProperty")。- 这种写法不仅避免了不必要的对象实例化,还保留了
nameof()的核心优势:比如后续重构类或属性名称时,编译器会自动同步nameof()的结果,彻底避免硬编码字符串带来的维护隐患。
内容的提问来源于stack exchange,提问作者Rekshino
相关产品推荐
相关产品推荐

