最近寫程式時有個需求,就是有些程式邏輯跟變數會寫在設定檔裡,對於變數的設定一直都有個困擾,如果變數型態是字串還好辦,但假如想放整數或是布林型態,如何從字串轉為真正對應的型態並沒有現成的函式可用,幸好 Reflection 技術可以解決這個問題。
string strInputType = "System.Int32";
string strInputValue = "123";
Type type = Type.GetType(strInputType);
MethodInfo tryParseMethod = type.GetMethod("TryParse", new Type[] { typeof(string), type.MakeByRefType() });
object[] parameters = new object[] { strInputValue, Activator.CreateInstance(type) };
object obj2 = tryParseMethod.Invoke(null, parameters);
Console.WriteLine("Result: " + parameters[0].ToString());
Console.WriteLine("Type: " + type.FullName);前兩個變數為輸出的型態,以及該變數的值為何。利用 Reflection 取得 TryParse 的 MethodInfo,要注意的是第二個參數,由於 TryParse 裡的參數含有 out 關鍵字,所以記得呼叫 MakeByRefType 方法,至於為何要呼叫 MakeByRefType,其中的原由我想可以參考 C++ 的 & 關鍵字(Reference)。最後,由 parameters 取得最後的結果。
文章標籤
全站熱搜
