2014-04-23 24 views
1

我有一個程序,用戶在其中輸入想要更改的變量的名稱。因此,我們有這樣的:訪問類似符號數組的C#類變量?

string user_input = "age"; 

而且我有以下類:

class Jim{ 
    public static int age = 10; 
    public static bool married = false; 
    public static string name = "John"; 
} 

我現在想打印變量的用戶輸入的值。因此,由於用戶輸入age我想打印Jim.age。我怎樣才能將user_input轉換成讓我訪問課程的東西。我真的想像你在JS中那樣做Jim[input_string],但我相信這是可能的。

我會用字典來存儲與Jim相關的所有變量,但是您不能製作Dictionary,它的地圖爲<string, bool or int or string>

+0

這真的不是你應該解決這個問題的方式。也許是某種綁定。但試圖根據用戶輸入進行反映是非常危險的。 – Magus

+0

您可能需要考慮expando對象的這個http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject(v=vs.110).aspx – milagvoniduak

+0

switch語句有什麼問題? – Jonesopolis

回答

2

我會用字典來存儲所有與吉姆相關的變量,但是你不能將一個字典映射爲<string, bool or int or string>

當然可以,一個Dictionary<string, object>string,boolint都可以存儲在類型爲object的變量中。

0

正常的方式做,這是使用反射:

FieldInfo requestedField = typeof(Jim).GetField("age"); 
Console.WriteLine(requestedField.GetValue(instanceOfJim)); 

不幸的是,你不能這樣做,因爲你的變量是靜態的。讓他們成爲實例成員,它會工作。正如評論者所指出的,允許用戶進行反思並不是一個好主意,因此您可能需要重新思考一般用例。

你也可以使用映射到對象字典,作爲Servy建議。再次

class Jim 
{ 
    ...Member variables... 
    public static GetMember(String name) 
    { 
     FieldInfo requestedField = typeof(Jim).GetField(name); 
     return requestedField.GetValue(null); 
    } 
} 

,不建議這樣,但它會得到你想要的功能:

有趣的是,它可以與靜態的工作,只要你把方法的吉姆類。

如果你想知道,在MSDN爲FieldInfo.GetValue:MSDN