2012-06-06 37 views
2

當我比較兩個字符串大小寫不敏感,我用:我們可以縮短s1.Equals(s2,StringComparison.InvariantCultureIgnoreCase)嗎?

if (s1.Equals(s2, StringComparison.InvariantCultureIgnoreCase)) ... 

我想縮短整個我的代碼本聲明作爲String.Comparison.InvariantCultureIgnoreCase是相當冗長,特別是如果你要做的多重比較。

有沒有一種方法來替代它,以便在整個MVC項目中都能找到它? (我也有外部類,我也必須添加這個別名)

回答

2

你可以爲它編寫一個extension method

namespace ExtensionMethods 
{ 
    public static class MyExtensions 
    { 
    public static bool MyEqual(this String s1, string s2) 
    { 
     return s1.Equals(s2, StringComparison.InvariantCultureIgnoreCase); 
    } 
    } 
} 
0

擴展方法:

public static CiEquals(this string s1, string s2) 
{ 
    return s1.Equals(s2, StringComparison.InvariantCultureIgnoreCase); 
} 
+0

不會編譯,必須是靜態類的成員。 – asawyer

+0

這是擴展方法的先決條件,是的。你還想發佈一個周圍的靜態類嗎? –

2

爲什麼不寫這確實不區分這種比較的擴展方法?

public static bool EqualsIgnoreCase(this string s1, string s2) 
{ 
    return s1.Equals(s2, StringComparison.InvariantCultureIgnoreCase); 
} 
1

一個簡單的擴展方法。

public static bool EqualsCaseLess(this string s1, string value) 
{ 
    return s1.Equals(value, StringComparison.InvariantCultureIgnoreCase); 
} 
4

您可以進行相等比較私人靜態變量,並使用你的方法是變量:

在你的類聲明:

private static readonly IEqualityComparer<string> EqIgnoreCase = 
    StringComparer.InvariantCultureIgnoreCase; 

在你的方法:

if (EqIgnoreCase.Equals(s1, s2)) { 
    // ... 
} 

這種方法的一個優點是它看起來是對稱的;另一個是它不會拋出如果s1s2null

+0

對不起,不得不刪除我的評論,因爲第一行看起來根本不起作用。 –

+1

@ JesseC.Slicer糟糕,你是對的,我用了一個錯誤的類型('StringComparison'而不是'StringComparer')。它現在應該工作。 – dasblinkenlight

相關問題