C# - 将一个字符串变量与多个其他字符串(String.Equals)进行比较

时间:2017-04-05 12:46:06

标签: c# string equals

你有想法避免做多个String.Equals吗? 例如:

if (interSubDir.Equals("de") || interSubDir.Equals("de-DE"))

谢谢!

3 个答案:

答案 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)));