我想獲得一個屬性的名稱,例如:淨獲取屬性名
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
任何想法如何?
我想獲得一個屬性的名稱,例如:淨獲取屬性名
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
任何想法如何?
做的。你說的是財產,或者你的意思是一個場
有用於獲取屬性的名稱巧妙拉姆達技術 - 這裏有一個C#示例:
String GetPropertyName<TValue>(Expression<Func<TValue>> propertyId)
{
return ((MemberExpression)propertyId.Body).Member.Name;
}
這樣稱呼它:
GetPropertyName(() => MyProperty)
它將返回「我的物業」
不知道這是你在做什麼或不。
通過反射。使用類型的GetType()方法,然後查看GetProperties()方法和PropertyInfo類。 (如果您想檢索字符串 「PROPERTYNAME」(對於場稱爲propertyName的 - 使用xxx.GetType()GetFields()[0]請將.Name如果它是第一個字段類
只有當您知道該類中屬性的索引時纔有效,因爲該類可以更改或可能不完整,所以該屬性並不真實。 – Ucodia 2010-07-27 08:19:21
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;
注意的是,上述方法的延伸,應該如果您正在使用被寫在一個靜態類,並通過包含命名空間
或者在OP的情況下,在VB中它是一個擴展方法,它應該位於Module(非靜態類)中,並使用Extension屬性而不是this關鍵字進行裝飾。 – 2013-07-16 19:35:40
使用C#6.0(在問這個問題時沒有發佈)你可以使用nameof(PropertyName)
這是在編譯時計算並轉換爲字符串,關於使用nameof()
的好處在於你不必在重構時手動更改字符串。 (nameof
作品上比屬性更,CallerMemberName
更嚴格)
如果你還停留在前期的C#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;
}
我不明白爲什麼這不被人理解,但這種方法真的很整齊。謝謝 – CodeWrite 2016-02-23 16:10:04
你想要的字符串' 「姓名」'? – leppie 2010-07-27 08:01:43