out关键字失败的默认参数

时间:2011-01-21 09:54:45

标签: c# optional-parameters

我编写了一个通用枚举TryParse方法,我希望将其与可选参数一起使用,但由于它包含out关键字,因此结果证明这是不可能的。

这是一个代码示例:

public static class Enum<T>
{
  public static bool TryParse(string value, bool ignoreCase = true, out T returnedValue)
  {
    //Not really relevant to the question, but here for completeness.
    try
    {
      returnedValue = (T)Enum.Parse(typeof(T), value, ignoreCase);
      return true;
    }
    catch
    {
      returnedValue = default(T);
      return false;
    }
  }
}

可悲的是,这是无效的,因为我得到了那个熟悉的错误:

Optional parameters must appear after all required parameters

通常,这是有道理的,但不是这里。我认为语言应该“足够聪明”,以确定这是正常的 - out关键字必须是最后一个,并且它不能具有默认值。请注意,如果您尝试设置默认值,则会发生这种情况:

A ref or out parameter cannot have a default value

有没有人自己碰到过这个?如果是这样,他们如何解决这个问题呢?如果没有,我应该在Microsoft Connect上提出这个问题吗?

我确实意识到,如果这不起作用,那么我将不得不再创建一个方法,但是没有ignoreCase param,然后只返回一行,但是传递{{1 } {}为true

提前致谢!

2 个答案:

答案 0 :(得分:3)

如何做到这一点àl''ancienne

public static bool TryParse(string value, out T returnedValue)
{
    return TryParse(value, true, out returnedValue);
}

public static bool TryParse(string value, bool ignoreCase, out T returnedValue)
{
    ...
}

答案 1 :(得分:2)

问题实际上在于订购。试试这个:

public static bool TryParse(string value,
                            out T returnedValue,
                            bool ignoreCase = true)

out参数必须是最后一个 - params参数。 (他们仍然可以使用可选参数。)