Tol*_*olu 1 .net c# overloading
我有这两个重载方法定义:
string[] Test1(string data)
Run Code Online (Sandbox Code Playgroud)
和
string[] Test1(params string[] input)
Run Code Online (Sandbox Code Playgroud)
当我Test1("Single test data")意图调用第二个方法时,第一个方法被调用。
为什么编译器不像更明显的重载冲突场景那样标记这种情况?
Jon*_*eet 13
\n\n为什么编译器不像更明显的重载冲突场景那样标记这种情况?
\n
因为语言规则告诉它不要这样做。
\n对此有一个非常具体的规则。来自C# 7 规范第 12.6.4.3 节:
\n\n\n否则,如果 M\xe1\xb5\xa2 以其正常形式适用,并且 M\xe2\x82\x91 有一个 params 数组并且仅以其扩展形式适用,则 M\xe1\xb5\xa2 优于 M\ xe2\x82\x91。
\n
在这种情况下,您的第一种方法适用于其正常形式,而您的第二种方法仅适用于其扩展形式,因此第一种方法比第二种方法更好。
\n