我编写了一个通用枚举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
。
提前致谢!
答案 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
参数。 (他们仍然可以使用可选参数。)