close

最近寫程式時有個需求,就是有些程式邏輯跟變數會寫在設定檔裡,對於變數的設定一直都有個困擾,如果變數型態是字串還好辦,但假如想放整數或是布林型態,如何從字串轉為真正對應的型態並沒有現成的函式可用,幸好 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);
.NET 內建的 Value Type 都有一個對應的 TryParse 方法,而且參數都是一個字串跟一個輸出的變數(型態當然就以該 Value Type 為主)。以下是範例程式碼:

前兩個變數為輸出的型態,以及該變數的值為何。利用 Reflection 取得 TryParse 的 MethodInfo,要注意的是第二個參數,由於 TryParse 裡的參數含有 out 關鍵字,所以記得呼叫 MakeByRefType 方法,至於為何要呼叫 MakeByRefType,其中的原由我想可以參考 C++ 的 & 關鍵字(Reference)。最後,由 parameters 取得最後的結果。

arrow
arrow
    全站熱搜

    卑微研究生 發表在 痞客邦 留言(0) 人氣()