解决C#中的params

Spo*_*ook 9 c# params

解析传递的可变参数数量时有哪些规则params

假设我有代码:

public void Method(params object[] objects) { }

public void Method(IMyInterface intf, params object[] objects) { }
Run Code Online (Sandbox Code Playgroud)

Method(a, b, c)如果a是IMyInterface,如何解决?我可以确定,C#总是会尝试选择大多数匹配的重载吗?

Jon*_*Jon 11

这可以通过C#语言规范来回答:

7.5.3.1适用的功能成员

[...]

  • 否则,如果MP以其正常形式适用且MQ具有params数组并且仅适用于其扩展形式,则MP优于MQ.

  • 否则,如果MP具有比MQ更多的声明参数,则MP优于MQ.如果两个方法都有params数组并且仅适用于它们的扩展形式,则会发生这种情况.

[...]

在您的示例中,两个重载仅适用于其扩展形式.由于第二个具有更多声明的参数,因此会更好.

在规范的上下文中,一个重载优于所有其他重载意味着编译器选择它来绑定调用,正如在讨论的示例中所发生的那样(如果没有一个重载优于所有其他重载,则结果是由于模糊而导致的编译时错误).