若果一個函數有個參數是傳引用的,比如ref 或者out,該如何得到被修改的結果呢?請看如下的代碼
Int32[] input = new Int32...{1,2};
txtOut.AppendText(input.Length.ToString() + Environment.NewLine);
// txtOut is a multiline enabled textbox in my test form
MethodInfo info = typeof(Array).GetMethod("Resize").MakeGenericMethod(typeof(Int32));
Object[] paras = new Object[] ...{ input, 4 }; //如果是out型的,直接傳個null就行。
info.Invoke(null, BindingFlags.InvokeMethod, null, paras, null);
input = paras[0] as Int32[]; // get the written argument
CLR似乎會修改掉參數數組對象(paras)的引用,使其指向新的數組。 然後在其中存放輸出結果。所以你就可以在修改後的數組中得到你想要的結果。順便可以看一下對於泛型方法的實例化調用(MakeGenericMethod).