我们可以缩短s1.Equals(s2,StringComparison.InvariantCultureIgnoreCase)吗?

时间:2012-06-06 15:38:44

标签: c# string comparison equals

当我比较两个不区分大小写的字符串时,我使用:

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

我想在整个代码中缩短这个陈述,因为String.Comparison.InvariantCultureIgnoreCase非常冗长,特别是如果你不得不进行多次比较。

有没有办法对其进行别名,以便在整个MVC项目中获得它? (我也有外部类,我也必须添加这个别名)

5 个答案:

答案 0 :(得分:4)

您可以将相等比较器设为私有静态变量,并在方法中使用该变量:

在你的班级声明中:

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

在你的方法中:

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

这种方法的一个优点是它看起来是对称的;另一个是如果s1s2null则不会抛出。

答案 1 :(得分:2)

你可以为它写一个extension method

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

答案 2 :(得分:2)

为什么不写一个没有大小写进行比较的扩展方法?

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

答案 3 :(得分:1)

一种简单的扩展方法。

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

答案 4 :(得分:0)

扩展方法:

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