我试图创造出一个检查是否String
包含包含在IEnumerable<String>
。我的方法中的任何Strings
的方法,到目前为止是这样的:C#StringComparer:可选参数默认
public static Boolean ContainsAny(this String Self, IEnumerable<String> Fragments, StringComparer CompareType = StringComparer.CurrentCulture)
{
foreach (var fragment in Fragments)
{
if (Self.Contains(fragment,CompareType))
{
return true;
}
}
return false;
}
然而,这不会编译,因为StringComparer.CurrentCulture
ins't编译时间常数见下面的错误:
> Error 1 Default parameter value for 'CompareType' must be a
> compile-time constant
我的问题是,什么是我可以用CompareType
这将导致在T可接受的默认值他相同的行为,如果它有可能默认为StringComparer.CurrentCulture
?
谢谢,我喜欢第一种方法的处理问题的方法,尤其是我不需要只用一种方法来实现它。 – HennyH
重载与“框架一致”的部分原因是默认参数对于C#语言来说是相对较新的。在他们之前,所有的框架都使用重载,所以他们在为了向后兼容而引入默认参数后保留它们。 – dasblinkenlight
@dasblinkenlight我同意,所以加1给你.. :)我个人喜欢并使用可选参数!我唯一讨厌的就是在intellisense中看到'[....]'括号! :) – nawfal