【发布时间】:2011-12-26 00:01:45
【问题描述】:
我最近正在编写一些代码来使用 .NET 3.5 中的委托来执行 WriteLine。 使用各种不同的 Action 委托一切都很顺利,直到我遇到了 WriteLine 的重载
public static void WriteLine(string format, object arg0, object arg1, object arg2, object arg3)
由于我使用的是 .NET 3.5,所以没有 Action<T1, T2, T3, T4, T5> 委托,所以我快速编写了自己的:
public delegate void Action<T1, T2, T3, T4, T5>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5);
然后我将 WriteLine 分配给此方法Action<string, object, object, object, object> action = Console.WriteLine; 并收到错误消息
'WriteLine' 没有重载匹配委托'Action
'
我认为这一定是由于某些泛型问题造成的,所以我明确声明了一个新委托:
public delegate void WriteLineAction(string format, object arg0, object arg1, object arg2, object arg3);
然后我尝试将 WriteLine 分配给这个新方法并再次收到错误消息:
“WriteLine”没有重载匹配委托“WriteLineAction”
更奇怪的是,如果我右键单击出现错误的 Console.WriteLine 调用并说“转到定义”,它会将我带到元数据中的 WriteLine 的正确版本,所以为什么无法将方法与委托匹配。我在这里做了什么非常愚蠢的事情还是这是一个已知问题/功能?
【问题讨论】:
-
不确定这是否是您要完成的任务,但如果您正在实施灵活的日志记录,那么您可能需要查看像 NLog 这样的库。它摇滚:)
-
你是对的,这很奇怪......我只是将 WriteLine 方法的签名复制到一个新的静态类中,当我将委托指向这些时,它工作正常。