从方法返回多个值

JKF*_*JKF 7 c#

我可以想到以下几种方法从一个方法返回多个值(以及一个分成两个方法的方法)

private bool IsCarFaulty(Car car, out string fault)
{
  fault = string.Empty;
  return false;
}
Run Code Online (Sandbox Code Playgroud)
private Tuple<bool, string> IsCarFaulty(Car car)
{
  return Tuple.Create(false, string.Empty);
}
Run Code Online (Sandbox Code Playgroud)
private ResultAndMessage IsCarFaulty(Car car)
{
  return new ResultAndMessage(false, string.Empty);
}
Run Code Online (Sandbox Code Playgroud)
private bool IsCarFaulty(Car car)
{
  return false;
}

private string GetCarFault(Car car)
{
  return string.Empty;
}
Run Code Online (Sandbox Code Playgroud)

基本上我的问题是,是否存在一个优于另一个的情况?如果我以int.TryParse为例.它使用out参数,但不能将它分成两个方法,CanParseParse也可以正常工作,如果不是更好的话.

Tho*_*que 3

基本上我的问题是,是否存在一种情况比另一种更可取的情况?

当然可以,但我不认为存在适用于所有情况的一般规则。只需根据具体情况选择您觉得更舒服的一个即可。

我通常避免使用out参数,因为它们不能很好地与 Linq 配合使用。

如果我以 int.TryParse 为例。它使用 out 参数,但无法将其拆分为两个方法 CanParse 和 Parse 工作得同样好,甚至更好。

当然,它可以工作,但这意味着字符串将被解析两次,这是次优的。

当 int.TryParse 被引入时,C# 没有可空类型 (编辑:实际上它有);现在你可以编写这样的方法:

public static int? TryParseInt32(string s)
{
    int i;
    if (int.TryParse(s, out i))
        return i;
    return null;
}
Run Code Online (Sandbox Code Playgroud)

  • Nullable 类型和 int.TryParse 都是在 .NET2.0 中引入的。 (2认同)