2012-11-05 45 views
2

我目前發射到[mscorlib]System.Console::Write(char)一個電話如下:如何發出對[mscorlib] System.Console :: Write(char)的調用?

ilg.EmitCall(OpCodes.Call, 
      typeof(Console).GetMethods().First(m => 
       m.Name == "Write" && m.GetParameters().Length == 1 && 
       m.GetParameters().Any(p => p.ParameterType == typeof(char))), 
      null); 

但有我如何能引用Console.Write(char)方法,可能沒有通過正規的論點實際上遍歷一個更清潔的方式

+0

旁註:我看沒有什麼特別誤以爲這是寫(假設如果測量顯示緩存的好處會被緩存)的方式。你可以將'Any'放在'm.GetParameters()[0] == typeof(char)'使它更短... –

回答

8

嘗試使用GetMethod,而不是GetMethods

ilg.EmitCall(OpCodes.Call, 
    typeof(Console).GetMethod("Write", new[] { typeof(char) }), 
    null); 
+0

+1看起來好多了。但是我編輯了你的答案,將第三個實際參數添加到方法中,因爲對於帶有兩個參數的'EmitCall'沒有重載。 –

相關問題