繁体   English   中英

C#获取类的非静态属性的名称

[英]C# Get the name of a non-static property of a class

我有一个与另一个问题非常相似的问题: 将属性名称作为字符串

他的解决方案结束了

// Static Property 
string name = GetPropertyName(() => SomeClass.SomeProperty); 

// Instance Property 
string name = GetPropertyName(() => someObject.SomeProperty); 

我想要的是具有类似于静态属性的语法,但是对于实例属性。

原因是我现在有代码使用反射来获取集合中所有对象的属性值,但我必须将其作为硬编码字符串传递。

示例代码:

double Sum = AmountCollection.Sum("thatfield");  

嗯,这很好用,但如果“thatfield”被重命名,代码将不再有效。 编译器无法检查它,因为它只是一个字符串。 此外,Get References也不会出于同样的原因。

那么,有没有办法实现从实例属性轻松获取属性名称的目标(即;只是一个函数调用)?

谢谢。

试试这个:

string name = GetPropertyName(() => default(SomeClass).SomeInstanceProperty);

您可能会收到编译器警告“始终导致System.NullReferenceException”,但实际上并没有发生,因为您没有执行表达式,这意味着您可以安全地丢弃此警告。 如果你想摆脱它,要么通过pragma禁用它,要么只是将default()调用移动到这样的函数:

public static T Dummy<T>() {
  return default(T);
}

string name = GetPropertyName(() => Dummy<SomeClass>().SomeInstanceProperty);

使用C#6.0,您使用nameof:

 nameof(SomeProperty)

此表达式在编译时解析为“SomeProperty”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM