微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何调用命名参数?

如何解决如何调用命名参数?

重载的方法示例,用于命名参数调用

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功能仅适用于位置参数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。