【问题标题】:Multiple optional parameters: it is possible to use different order?多个可选参数:可以使用不同的顺序吗?
【发布时间】:2019-07-04 07:10:37
【问题描述】:

我有一个带有 4 个可选参数的方法,我想在我的代码中使用任何可能的组合,包括第一个和最后一个。

这是一个例子:

public void Method(int a = 5, string b = "foo", bool c = true)
{
    ...
}

我想这样做:

Method(6, false);

但是,当我尝试仅使用这两个参数时,我得到了一个错误,我无法将字符串转换为布尔值。有没有办法在不重载的情况下解决这个问题?我不想使用重载,因为我必须创建大约 15 种具有所有可能组合的方法。

编辑:我不想使用

Method(a: 6, c: false);

因为我觉得这有点烦人。

【问题讨论】:

    标签: c# operator-overloading optional-parameters


    【解决方案1】:

    是的,你可以!

    您只需将参数名称添加到参数中,以指示您将参数传递给哪一个:

    Method(a: 6, c: false);
    

    【讨论】:

    • 抱歉,我忘了在我的问题中添加这个选项。我想避免这种情况,因为我觉得它很烦人。有不同的方法吗?
    • @vejvodma 你还要怎么告诉编译器哪个参数对应哪个参数?
    • @vejvodma IIRC,添加命名参数的原因之一是帮助处理这样的可选参数。为什么你会觉得烦?如果您正确命名参数,它将大大提高可读性。
    • 我对每个参数都有不同的类型,其中大多数是枚举,所以它实际上很容易阅读。
    • @vejvodma 好吧,就我而言,这是唯一可能的方法......
    【解决方案2】:

    您还可以为不同的参数顺序创建 2 个具有相同名称的不同函数。

    功能一:

    public void Method(int a, string b, bool c)
    {
        ...
    }
    

    函数二(只有2个参数):

    public void Method(int a, bool c)
    {
        ...
    }
    

    您的 IDE 会编译您的代码并知道要使用哪个函数

    【讨论】:

    • 嗯,这只是超载。我的方法中有 4 个参数,我想使用任何可能的组合,所以我必须创建比只有 2 个更多的方法。
    • 我刚刚向您展示了一种将程序逻辑自动提取到两个不同函数的可能方法。您的程序会根据您使用的参数自动使用这些功能。如果您想一次使用这些参数而另一次使用其他参数,那么您将找不到另一种方法,例如您已经使用 Method(a: 6, c: false); 显示的 Sweeper;
    • 感谢您的帮助,但就我而言,重载并不是最好(或最简单)的方法。
    猜你喜欢
    • 2016-03-25
    • 1970-01-01
    • 2014-03-15
    • 2018-12-18
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    相关资源
    最近更新 更多