我有一个与另一个问题非常类似的问题:Get name of property as a string。
他的解决方案以
结束// Static Property
string name = GetPropertyName(() => SomeClass.SomeProperty);
// Instance Property
string name = GetPropertyName(() => someObject.SomeProperty);
我想要的是具有类似于静态属性的语法,但是对于实例属性。
原因是我现在有代码使用反射来获取集合中所有对象的属性值,但我必须将其作为硬编码字符串传递。
示例代码:
double Sum = AmountCollection.Sum("thatfield");
嗯,这很好用,但如果“thatfield”被重命名,代码将不再有效。编译器无法检查它,因为它只是一个字符串。此外,Get References也不会出于同样的原因。
那么,是否有办法实现从实例属性轻松获取属性名称(即;只是函数调用)的目标?
感谢。
答案 0 :(得分:5)
试试这个:
string name = GetPropertyName(() => default(SomeClass).SomeInstanceProperty);
您可能会收到有关“始终导致System.NullReferenceException”的编译器警告,但实际上并未发生这种情况,因为您没有执行该表达式,这意味着您可以安全地丢弃此警告。如果你想摆脱它,可以通过编译指示禁用它,或者只是将default()
调用移动到这样的函数中:
public static T Dummy<T>() {
return default(T);
}
string name = GetPropertyName(() => Dummy<SomeClass>().SomeInstanceProperty);
答案 1 :(得分:0)
使用C#6.0,您可以使用nameof:
nameof(SomeProperty)
此表达式在编译时解析为“SomeProperty”。