C# 如何发出对[mscorlib]System.Console::Write(char)的调用?

C# 如何发出对[mscorlib]System.Console::Write(char)的调用?,c#,reflection,reflection.emit,C#,Reflection,Reflection.emit,我当前正在调用[mscorlib]System.Console::Write(char),如下所示: ilg.EmitCall(OpCodes.Call, typeof(Console).GetMethods().First(m => m.Name == "Write" && m.GetParameters().Length == 1 && m.GetParamet

我当前正在调用
[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);
但是,有没有一种更简洁的方法来引用
控制台.Write(char)
方法,可能不需要实际迭代形式参数?

尝试使用,而不是
GetMethods

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

旁注:我看不出它的编写方式有什么特别的错误(假设它是缓存的,如果度量显示缓存的好处)。您可以将
Any
作为
m.GetParameters()[0]==typeof(char)
删除,使其更短…+1看起来更好。但是我编辑了您的答案,将第三个实际参数添加到该方法中,因为
EmitCall
没有重载,它接受两个参数。