2010-04-21 34 views
1

如何獲取某個類的PropertyName?如何獲取某個類的PropertyName?

例如,如何獲取Student類實例的PropertyName「StudentName」?

public class Student 
{ 
    public string StudentName{get;set;} 
} 


Student student = new Student(); 

//I want to get the PropertyName "StudentName" 
student.StudentName.GetName(); 
+2

我不明白,如果您已經知道該屬性,那麼您的定義已經知道該屬性的名稱了? – 2010-04-21 05:57:45

+1

是否有任何理由不直接輸入「StudentName」作爲字符串?也許,如果你試圖解釋你想達到的目標,你可以得到更好的答案。 – Amry 2010-04-21 05:59:57

+0

它用於其他類,所以我不想硬鍵入字符串。 – Mike108 2010-04-21 06:40:44

回答

2

要獲得財產的實際名字,只是從具有訪問類,你可以使用以下命令:

Type studentType = typeof(Student); 
PropertyInfo[] AllStudentProperties = studentType.GetProperties(); 

如果你知道你正在尋找的名稱,只需要進入酒店本身,使用方法:

Type studentType = typeof(Student); 
PropertyInfo StudentProperties = studentType.GetProperty("StudentName"); 

一旦你的PropertyInfo,只需使用PropertyInfo.Name,這將給字符串表示。

如果在這之後你不想這個值,你將不得不有一個實例化的類來獲得值。除此之外,如果您使用static屬性,則可以在不實例化的情況下拉取該值。

2

更新答案:

C#現在有一個nameof運營商,所以你應該使用它。

您可以在實例或學生類型本身上使用它。

例子:

nameof(student.StudentName); // returns "StudentName" 
nameof(Student.StudentName); // returns "StudentName" 

原來的答覆(nameof之前寫存在):

您可以使用下面的靜態方法:

static string GetName<T>(T item) where T : class 
{ 
    var properties = typeof(T).GetProperties(); 
    return properties[0].Name; 
} 

使用像這樣:

string name = GetName(new { student.StudentName }); 

詳情請參閱this question