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

Fra*_*VDB 3 c# string equals

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

if (interSubDir.Equals("de") || interSubDir.Equals("de-DE"))
Run Code Online (Sandbox Code Playgroud)

谢谢!

Mat*_*son 7

如果您只是想让它更具可读性或需要更少的输入,您可以编写一个字符串扩展方法,如下所示:

public static class StringExt
{
    public static bool EqualsAnyOf(this string value, params string[] targets)
    {
        return targets.Any(target => target.Equals(value));
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以使用如下:

if (interSubDir.EqualsAnyOf("de", "de-DE"))
Run Code Online (Sandbox Code Playgroud)

要么

if (interSubDir.EqualsAnyOf("de", "de-DE", "en", "en-GB", "en-US"))
Run Code Online (Sandbox Code Playgroud)

等等.


Ale*_*rov 5

创建值集合:

string[] values = { "de", "de-DE" };
Run Code Online (Sandbox Code Playgroud)

使用Contains方法:

if (values.Contains(interSubDir))
Run Code Online (Sandbox Code Playgroud)

它提供了 O(n) 的性能。

如果您的集合非常大,那么您可以使用Array.BinarySearch方法,该方法可为您提供 O(log n) 性能。

if (Array.BinarySearch(values, interSubDir) >= 0)
Run Code Online (Sandbox Code Playgroud)

但是,必须先对集合进行排序。

Array.Sort(values);
Run Code Online (Sandbox Code Playgroud)