C#中的可选/无效OUT参数

Der*_*ker 19 c# parameters nullable

我有一个方法有几个覆盖.在其中一个更扩展的覆盖中,我想返回一个OUT参数,但不是在我更简单的覆盖中.例如:

public bool IsPossible(string param1, int param2)
public bool IsPossible(string param1, int param2, out bool param3)
Run Code Online (Sandbox Code Playgroud)

我目前实现这一目标的方式是这样的:

public bool IsPossible(string param1, int param2) {
    bool temp;
    return IsPossible(param1, param2, out temp);
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来实现这一目标?我(或我应该)可以使用null-out参数吗?

Luc*_*ero 17

这看起来很好.out由于技术原因,A 不能是可选的(它需要指向有效的实例).


aar*_*lin 12

从 C# 7.0 开始,您可以将 Discard ( _)传递到该方法中:

return IsPossible(param1, param2, out _);
Run Code Online (Sandbox Code Playgroud)

请参阅:https : //docs.microsoft.com/en-us/dotnet/csharp/discards


Nic*_*rey 6

操作:

我可以(或应该)使用可为空的输出参数吗?

可为空的 out 参数对您没有多大好处。这个:

public bool IsPossible( string param1, int param2, out bool? param3 )
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

不做param3可选。它改变了 what param3 is的语义。A bool?(aka Nullable<bool>) 将域param3从 2 个值 ( trueand ) 扩大false到 3,添加了第三个值 ( null),通常被解释为缺失/未知。调用者仍然必须提供所有三个参数。

IsPossible()通过提供重载来重载——“不关心”场景——丢弃引用参数是正确的解决方案。