您有避免執行多個String.Equals的想法嗎? 例如:C# - 將一個字符串變量與多個其他字符串進行比較(String.Equals)
if (interSubDir.Equals("de") || interSubDir.Equals("de-DE"))
謝謝!
您有避免執行多個String.Equals的想法嗎? 例如:C# - 將一個字符串變量與多個其他字符串進行比較(String.Equals)
if (interSubDir.Equals("de") || interSubDir.Equals("de-DE"))
謝謝!
創造價值的集合:
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);
Linq可以幫你。 listToChechAgainst
可能是簡單的變量或私人/公共財產。如下
public static class StringExt
{
public static bool EqualsAnyOf(this string value, params string[] targets)
{
return targets.Any(target => target.Equals(value));
}
}
,您可以使用:
var listToChechAgainst = new[] { "de", "DE-de" };
if(listToChechAgainst.Any(x => innerSubDir.Equals(x)));
如果你只是想使其更具可讀性,或者需要較少的打字,你可以寫一個字符串擴展方法,像這樣
if (interSubDir.EqualsAnyOf("de", "de-DE"))
或者
if (interSubDir.EqualsAnyOf("de", "de-DE", "en", "en-GB", "en-US"))
等。
您可以創建一個字符串文字集合並檢查該集合是否包含'interSubDir'。 – David
您將不得不在每個目標點進行比較,無論是循環還是單獨。你只是想讓它更具可讀性嗎? –
通常,當你檢查X是否等於A,B,C,D等時,你必須檢查每一個。沒有真正的捷徑。有時候,你可以把事情組合成一個數組,並使用'Any'來執行檢查,但是如果你所做的取決於你正在檢查的內容,那對你無能爲力。 – Will