问题描述
internal static dynamic TestMethod(params dynamic[] P1)
{
//Sample Code
}
internal static dynamic TestMethod(dynamic P2,system.int32 P2a)
{
//Sample Code Overload
}
如何为params
参数使用命名参数?
public static void Main()
{
TestMethod(1,2,3); //Works
TestMethod(1,2); //Overload Conflict
TestMethod(1,P2a: 2); //Overload Fix
// How to call the named params parameter P1 of the first TestMethod?
TestMethod(P1: /* ???? */ );
}
解决方法
这两个功能不兼容。您将必须自己构造数组,而不是让编译器为您这样做(总是以任何一种方式构造数组)。
我们怎么知道它们不兼容?来自Argument lists:
带有 argument_name 的 argument 被称为 命名参数 ,而 argument没有 argument_name 的是 位置参数 。位置参数出现在 argument_list 中的命名参数之后。
请注意,最后一句话-命名参数后不能有位置参数。
Runtime evaluation of argument lists:
方法,索引器和实例构造函数可以将其最右边的参数声明为参数数组
...
以扩展形式调用带有参数数组的函数成员时,调用必须为参数数组指定零个或多个位置参数 ...
(我的重点)
也就是说,params
功能仅适用于位置参数。