【发布时间】:2016-12-19 21:21:33
【问题描述】:
我正在编写一个接受许多参数的方法(我们称之为“Bar”)。为方便起见,我设置了一个默认值,以便开发人员在调用我的方法时不必指定一堆“null”。换句话说,我的方法的签名是这样的:
public void Bar(string paramA = null, string paramB = null, ... many more parameters omitted...)
我的方法中的代码检查空值并在这种情况下忽略参数。但是,在某些情况下,我需要区分“默认”空值和开发人员故意设置的空值。
这里有两个示例调用来说明我在说什么。第一个示例省略了所有参数(因此 C# 编译器将在编译时将它们替换为 null),第二个示例开发人员决定为第一个参数指定“null”。
Bar();
Bar(null);
我找到了几篇谈论使用“Option/Some/None”模式的文章。我认为最好的是here。
但我正在努力弄清楚如何才能为开发人员提供方便的“默认”值。从概念上讲,我想写这样的东西:
public void Bar(Option<string> paramA = Option.None)
但 C# 编译器抱怨 'Option.None' 不是编译时常量。
【问题讨论】:
-
如果您有“许多参数”,通常会有一个参数类难以摆脱,您可以随意使用属性进行初始化(而您未分配的参数类将保留其默认值) .这也不需要任何时髦的
Option类。如果您需要在下一个版本中更改默认值,它也不会中断。 -
或者你可以添加一个额外的参数
bool useA = true,如果用户不想使用A,他可以将useA设置为false。但是,在实践中,您最好像其他人建议的那样添加一些重载或使用类作为参数。
标签: c#