你有想法避免做多个String.Equals吗? 例如:
if (interSubDir.Equals("de") || interSubDir.Equals("de-DE"))
谢谢!
答案 0 :(得分:7)
如果您只是想让它更具可读性或需要更少的输入,您可以编写一个字符串扩展方法,如下所示:
public static class StringExt
{
public static bool EqualsAnyOf(this string value, params string[] targets)
{
return targets.Any(target => target.Equals(value));
}
}
您可以使用以下内容:
if (interSubDir.EqualsAnyOf("de", "de-DE"))
或者
if (interSubDir.EqualsAnyOf("de", "de-DE", "en", "en-GB", "en-US"))
等等。
答案 1 :(得分:2)
创建值集合:
string[] values = { "de", "de-DE" };
使用Contains
方法:
if (values.Contains(interSubDir))
它提供O(n)表现。
如果你的集合非常大,那么你可以使用Array.BinarySearch
方法,它可以提供O(log n)性能。
if (Array.BinarySearch(values, interSubDir) >= 0)
但是,必须先对集合进行排序。
Array.Sort(values);
答案 2 :(得分:0)
Linq可以为你提供帮助。 listToChechAgainst
可以是简单变量或私有/公共属性。
var listToChechAgainst = new[] { "de", "DE-de" };
if(listToChechAgainst.Any(x => innerSubDir.Equals(x)));