【发布时间】:2011-03-04 23:10:25
【问题描述】:
我正在处理一些代码,该代码具有七个函数 TraceWrite 的重载:
(所有公共静态、命名空间噪音都被忽略了。)
所以,在这样的背景下:
1)在其他地方,我用四个参数调用TraceWrite:string, LogLevelENUM, string, bool,我得到以下错误:
错误 CS1502: 'TraceWrite(string, LogLevelENUM, string, string)' 的最佳重载方法匹配有一些无效参数 错误 CS1503:参数“4”:无法从“布尔”转换为“字符串”
为什么这个调用不能解决第二个重载? (TraceWrite(string, LogLevelENUM, string, bool, string = ""))
2) 如果我用string, LogLevelENUM, string, string 调用TraceWrite,会调用哪个重载?第一个还是第三个?为什么?
【问题讨论】:
-
for 1),我无法重现您看到的错误。当我用这个调用它时,它似乎编译得很好: TraceWriter.TraceWrite("", LogLevelENUM.FakeLevel, "", false);
-
好吧,那是奇怪。但它也发生在我身上。有时 (string, LogLevelENUM, string, bool) 会编译,有时则不会。我将不得不更加努力地看待这一点。
标签: c# overloading optional-parameters overload-resolution