我想获取一个属性的名称,例如:
Dim _foo As String
Public Property Foo as String
Get
Return _foo
End Get
Private Set(ByVal value as String)
_foo = value
End Set
Sub Main()
Console.Write(Foo.Name)'Outputs "Foo"
End Sub
任何想法如何?
答案 0 :(得分:24)
你的意思是财产,还是指一个领域?
有获取属性名称的聪明的lambda技术 - 这是一个C#示例:
String GetPropertyName<TValue>(Expression<Func<TValue>> propertyId)
{
return ((MemberExpression)propertyId.Body).Member.Name;
}
这样称呼:
GetPropertyName(() => MyProperty)
它将返回“MyProperty”
不确定这是不是你想要的。
答案 1 :(得分:9)
如果您使用的是C#6.0(在询问此问题时未发布),您可以使用nameof(PropertyName)
这在编译时进行评估并转换为字符串,使用nameof()
的好处是您在重构时不必手动更改字符串。
(nameof
不仅适用于属性,CallerMemberName
更具限制性)
如果您仍然停留在预编号6.0,那么您可以使用CallerMemberNameAttribute
(它需要.net 4.5)
private static string Get([System.Runtime.CompilerServices.CallerMemberName] string name = "")
{
if (string.IsNullOrEmpty(name))
throw new ArgumentNullException("name");
return name;
}
答案 2 :(得分:3)
public static PropertyInfo GetPropInfo<T>(this T @object
, Expression<Action<T>> propSelector)
{
MemberExpression exp= propSelector.Body as MemberExpression;
return exp.Member as PropertyInfo;
}
然后像这样使用它:
string str = ....
string propertyName = str.GetPropInfo(a => a.Length).Name;
请注意,上述方法是一个扩展,应该用静态类编写,并通过包含命名空间
来使用答案 3 :(得分:0)
通过反思。使用该类型的GetType()方法,然后查看GetProperties()方法和PropertyInfo类。 (如果你想检索字符串“propertyName”(对于名为propertyName的字段 - 请使用xxx.GetType()。GetFields()[0] .Name如果它是类中的第一个字段。