【问题标题】:Distinguish between optional and mandatory parameter [closed]区分可选参数和强制参数[关闭]
【发布时间】:2019-06-11 13:18:24
【问题描述】:

我有 2 个重载

void SomeMethod(SomeType parameter1, bool optionalParameter = true){} //1st overload

void SomeMethod(SomeType parameter1, bool parameter2, bool optionalParameter = true){} //2nd overload

在调用第二个重载和省略可选参数时如何避免歧义?编译器总是选择第一个重载。 我看到了两种方式:

1) 切换参数1和参数2的位置:

void SomeMethod(bool parameter2, SomeType parameter1, bool optionalParameter = true){}

2) 使用第二次重载时显式提供默认值:

SomeMethod(parameter1, parameter2, true);

【问题讨论】:

  • 不同的方法名称,或强制所有参数。
  • 选择你最喜欢的选项: 1:不要使用可选参数。 2:使用命名参数,3:改变参数的顺序。 4:选择不同的方法名,5:改变参数的类型
  • 本书的干净代码在这里可能对您有所帮助。如果您发现自己处于这种情况,这往往是设计问题,您必须退后一步,思考为什么要以现在的方式进行操作。

标签: c# optional-parameters


【解决方案1】:

你可以这样称呼它:

SomeMethod(parameter1, parameter2: parameter2);

正如 cmets 中提到的,这就是使用命名参数的情况。再看一遍,这个实现没有多大意义。看起来您不需要第一种方法,也不需要在第二种方法上将额外参数标记为可选。

【讨论】:

  • 你是对的。我正在努力消除第一次过载的使用。但是,当我正在进行更换和测试时,出现了这种奇怪的行为。因此问题。
猜你喜欢
  • 2014-04-15
  • 2019-06-15
  • 1970-01-01
  • 2019-08-30
  • 2012-06-03
  • 2012-08-14
  • 2022-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多