Overload Resolution and Optional Arguments in C# 4
Posted
by Dale McCoy
on Stack Overflow
See other posts from Stack Overflow
or by Dale McCoy
Published on 2010-06-17T13:16:24Z
Indexed on
2010/06/17
13:33 UTC
Read the original article
Hit count: 356
I am working with some code that has seven overloads of a function TraceWrite
:
void TraceWrite(string Application, LogLevelENUM LogLevel, string Message, string Data = ""); void TraceWrite(string Application, LogLevelENUM LogLevel, string Message, bool LogToFileOnly, string Data = ""); void TraceWrite(string Application, LogLevelENUM LogLevel, string Message, string PieceID, string Data = ""); void TraceWrite(string Application, LogLevelENUM LogLevel, string Message, LogWindowCommandENUM LogWindowCommand, string Data = ""); void TraceWrite(string Application, LogLevelENUM LogLevel, string Message, bool UserMessage, int UserMessagePercent, string Data = ""); void TraceWrite(string Application, LogLevelENUM LogLevel, string Message, string PieceID, LogWindowCommandENUM LogWindowCommand, string Data = ""); void TraceWrite(string Application, LogLevelENUM LogLevel, string Message, LogWindowCommandENUM LogWindowCommand, bool UserMessage, int UserMessagePercent, string Data = "");
(All public static, namespacing noise elided above and throughout.)
So, with that background:
1) Elsewhere, I call TraceWrite
with four arguments: string, LogLevelENUM, string, bool
, and I get the following errors:
error CS1502: The best overloaded method match for 'TraceWrite(string, LogLevelENUM, string, string)' has some invalid arguments error CS1503: Argument '4': cannot convert from 'bool' to 'string'
Why doesn't this call resolve to the second overload? (TraceWrite(string, LogLevelENUM, string, bool, string = "")
)
2) If I were to call TraceWrite
with string, LogLevelENUM, string, string
, which overload would be called? The first or the third? And why?
© Stack Overflow or respective owner