我有一个方法有几个覆盖。在其中一个更扩展的覆盖中,我想返回一个OUT参数,但不是在我更简单的覆盖中。例如:
public bool IsPossible(string param1, int param2)
public bool IsPossible(string param1, int param2, out bool param3)
我目前实现这一目标的方式是这样的:
public bool IsPossible(string param1, int param2) {
bool temp;
return IsPossible(param1, param2, out temp);
}
有没有更好的方法来实现这一目标?我(或我应该)可以使用无效的参数吗?
答案 0 :(得分:17)
这对我来说很好看。由于技术原因,out
不能是可选的(它需要指向有效的实例)。
答案 1 :(得分:4)
A 'ref' or 'out' parameter cannot have a default value.
你做的方式很好。对不起,没有银弹。
答案 2 :(得分:4)
就我个人而言,我觉得它很好“。但另一种方法是返回一个复合返回值(可能是一个带有2个属性的不可变结构);这避免了一些人避免out
的事实。我不是那些人之一:p
回答问题;实际上,out / ref不能是可选的。
如果你想得到不必要的幻想,你可以给conposite return-type转换为bool以允许隐式if
测试。
答案 3 :(得分:4)
OP:
我(或我应该)可以使用null-out out参数吗?
可以为空的参数对你没什么好处。这样:
public bool IsPossible( string param1, int param2, out bool? param3 )
{
...
}
不会使param3
成为可选项。它会更改param3
的语义。 bool?
(又名Nullable<bool>
)将param3
的域从2个值(true
和false
)扩展为3,添加第三个值({{1}通常被解释为缺失/未知。调用者仍然必须提供所有三个参数。
通过提供过载来重载null
- “不关心”场景 - 丢弃参考参数是正确的解决方案。
答案 4 :(得分:2)
从C#7.0开始,您可以将Discard(_
)传递给方法:
return IsPossible(param1, param2, _);
答案 5 :(得分:1)
是的,Nullable变量很棒。然后你会做这样的事情。
public bool? IsPossible(string param1, int param2);
var ans = IsPossible("Parm1", 1);
if (ans.HasValue)
{
//working.
}