我希望能够获取属性的名称作为字符串,这样我就可以拥有一个“强类型”的魔法字符串。我需要做的是像 MyClass.SomeProperty.GetName() 这样的事情,它将返回“SomeProperty”。在C#中是否可能实现?
Expression
要快得多。public static string GetName<T>(this T item) where T : class
{
if (item == null)
return string.Empty;
return typeof(T).GetProperties()[0].Name;
}
new { MyClass.SomeProperty }.GetName();
如果您需要更好的性能,可以缓存值。请参阅此重复问题如何获取变量的名称,就像在其声明中实际键入的那样?
public int MyProperty {
get { return myProperty; }
set
{
myProperty = value;
RaisePropertyChanged( () => MyProperty );
}
}
string propertyName = Reflect.GetProperty(() => SomeProperty).Name;
Viola - 不需要神奇字符串的属性名称。
MyClass o;
PropertyInfo[] properties = o.GetType().GetProperties(
BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance
);