C# 中的参数重载

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

否则,如果 M\xe1\xb5\xa2 以其正常形式适用,并且 M\xe2\x82\x91 有一个 params 数组并且仅以其扩展形式适用,则 M\xe1\xb5\xa2 优于 M\ xe2\x82\x91。

\n
\n

在这种情况下,您的第一种方法适用于其正常形式,而您的第二种方法仅适用于其扩展形式,因此第一种方法比第二种方法更好。

\n

  • @bashis:我想说,规则描述了 99% 的时间所需要的。(特别是,如果您希望 `Test1("Single test data")` 调用第二个方法,那么您*永远*希望调用第二个方法吗?如果您真的想要,那么调用第二个方法很容易 - 只需自己构造一个单元素数组。) (3认同)