2014-12-03 548 views
0
var myObject = new { Id = 0, Name = "Test" }; 

我想獲得密鑰名稱爲可變項目的另一部分爲前:C#獲取對象對的名稱

var keyName = someObject[0]; //someObject is passed myObject; 
var value = someObject[1]; 
//Output keyName = Id; value = 0; 

我知道,字典將是一件好事,但我要堅持到myObject的拖延;

+0

爲什麼你需要根據索引訪問它們,你可以訪問它的屬性,比如'myObject.Id','myObject.Name'? – Habib 2014-12-03 13:26:01

回答

4

您可以訪問對象的屬性是這樣的:

myObject.GetType().GetProperties() 

和例如姓名

myObject.GetType().GetProperties()[0].Name //("Id") 
+0

哇非常類似於Java語法,謝謝:) – Obik 2014-12-03 13:47:28

0

這是不可能的反射,因爲一旦編譯爲IL,變量將不會有一個名稱。但是,您可以使用表達式樹,促進變量封閉:

static string GetVariableName<T>(Expression<Func<T>> expr) 
{ 
    var body = (MemberExpression)expr.Body; 

    return body.Member.Name; 
} 

如下您可以使用此方法:

static void Main() 
{ 
    var someVar = 3; 

    Console.Write(GetVariableName(() => someVar)); 
} 

請注意,這是相當緩慢的,所以不要用它在您的應用程序的性能關鍵路徑中。

有關更完整的示例,請參見here