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
没有重载,它接受两个参数。