【问题标题】:Named Parameters from C# 7.2C# 7.2 中的命名参数
【发布时间】:2020-01-20 03:46:08
【问题描述】:

为什么 C# 7.2 支持在命名参数之后的未命名参数,如果它们只能以相同的顺序使用?订单变了为什么不支持?

来自 C# 7.2 方法

public void M (int a, int b, int c, int d)

Console. WriteLine (a+b+c+d);

M (1, b : 2, 3, 4); / / output: 10

M (1, b : 2, c : 3, 4); // output: 10

M (1, c : 2, b : 3, 4); // Error

我们有一条规则,我们不应该在 C# 之前的命名参数之后使用未命名参数

7.2 版,从 C# 7.2 修改而来。

为什么会显示错误以及它们如何在内部映射?

【问题讨论】:

  • 如果改变顺序,未命名的参数会对应什么参数?
  • 不要发布代码图片,尤其是不要将您的问题作为图片发布。
  • 在最后一个示例中,M(1, c : 2, b : 3, 4) 参数被传递乱序,这就是为什么如果应该将1 分配给歧义 ad
  • 我们使用命名参数来避免它遵循的顺序。在 M(1, b : 2, C : 3, 4) 中,它将 1 分配给 'a' 和 4 分配给 'd' 以及为什么它没有以相同的顺序映射 M(1, c : 2, b : 3, 4) ?

标签: c# methods parameter-passing


【解决方案1】:
M (1, c : 2, b : 3, 4); // Error

这一行会抛出一个错误,因为数字 4 被用作位置参数,并且它在命名参数 c 之后,它不在它的位置。如果此代码行将作为以下代码的一部分输入到 Visual Studio 编辑器中

namespace OptionalAndNamedParameters
{
    class Program
    {
        static void Main(string[] args)
        {
            //M(1, b: 2, 3, 4);
            //M(1, b: 2, c: 3, 4);
            M(1, c: 2, b: 3, 4);//red squiggly line under 'c' and error
        }
        private static void M(int a, int b, int c, int d)
        {
            Console.WriteLine(a+b+c+d);
        }
    }
}

在 c 下:您会看到一条红色的波浪线,如果您将鼠标光标放在此处,您会看到注意:命名参数“c”使用不当,但后面跟着一个未命名参数。如果在 4 之前添加 d: 并且分析的代码行将变为

M(1, c: 2, b: 3, d:4);//correct code line without red squiggly line and error

红色波浪线将消失,代码将被正确执行并得到输出 10。

在 Microsoft 文档中,https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments 是对命名参数的解释:

  • 从 C# 7.2 开始,它们被用于正确的位置。在下面的示例中,参数 orderNum 的位置正确,但没有明确命名。

    PrintOrderDetails(sellerName: "Gift Shop", 31, productName: "Red Mug");
    

但是,如果无序命名参数后跟位置参数,则它们是无效的。

根据我的理解,如果为数字 1 分配名称 a 并且代码行将变为:

M(a:1, c: 2, b: 3, 4); //red squiggly line under 'c' and error

它必须工作,但是在Visual Studio编辑器中,在这种情况下,c下面会出现一条红色的波浪线,并且会抛出错误。同样的情况也适用于线路

M(d:1, c: 2, b: 3, 4); //red squiggly line under 'c' and error

这意味着当你通过命名改变某个参数的位置时,它后面的所有参数也必须被命名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    相关资源
    最近更新 更多