比较未知对象类型时,如何确保字符串不区分大小写?

维农

我有一个DataGridView,我正在编写一些通用代码来添加过滤器。列的基础数据类型可以是任何东西,但是,如果它们是字符串,我希望过滤器使用不区分大小写的比较。

我还使用该Equals方法而不是==运算符来确保它不仅在进行参考比较。字符串Equals方法有一个重载,让您选择一种StringComparison类型,但是我不知道它是否将是字符串,因此我只能访问Equals可用方法object

我尝试Equals为此编写扩展方法,object以便让我指定StringComparison类型。这样的想法是,如果对象是字符串,那么它将Equals在字符串对象上调用适当的重载,但否则,它将仅使用常规Equals方法。但是,这似乎不起作用,因为我收到一个编译错误,指出我不能将该方法作为实例方法来访问,而必须指定一个类型。我在下面包括了扩展方法,以防万一我做错了什么……我确实匆忙编写了它,但我不认为这是问题所在。我想我只需要找到另一种方法即可。

public static class Extensions
{
    public static bool Equals(this object obj1, object obj2, StringComparison comparisonType)
    {
        if (obj1 == null && obj2 == null)
            return true;
        if (obj1 == null && obj2 != null)
            return false;
        if (obj1 != null && obj2 == null)
            return false;

        string s = obj1 as string;

        if (s != null)
        {
            var s2 = obj2 as string;
            return s2 != null && s.Equals(s2, comparisonType);
        }
        else
            return obj1.Equals(obj2);
    }
}

因此,我正在寻找一种更好的方法,或者如果我只是在上面的代码中犯了一个错误,请告诉我。

编辑:

下面也是消费代码的样子。_filters只是具有一些属性的对象的列表,如下面所引用的,项目为IEnumerable<T>

        foreach (var f in _filters)
        {
            items = items.Where(o => o[f.FieldName].Equals(f.Value, StringComparison.InvariantCultureIgnoreCase));
        }
雷扎·阿盖伊(Reza Aghaei)

您可以使用其他扩展方法(例如)IsEqual,然后在方法内部检查参数是否为字符串,以您喜欢的方式进行比较。

例如,类似下面的代码。我没有测试功能,只是演示了这个想法:

public static class ObjectExtesions
{
    public static bool IsEqual(this object left, object right)
    {
        if (left == null && right == null)
            return true;
        if (left != null && right != null)
        {
            if (left is string && right is string)
                return ((string)left).Equals((string)right,
                    StringComparison.InvariantCultureIgnoreCase);
            else
                return left.Equals(right);
        }
        return false;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

javascript比较字符串而不区分大小写

不区分大小写的字符串比较怎么办?

如何进行不区分大小写的字符串比较?

Go模板中不区分大小写的字符串比较

Go中不区分大小写的字符串比较

SQL区分大小写的字符串比较

C ++中不区分大小写的字符串比较

字符串比较时如何将Sqlite3设置为不区分大小写?

C ++ 11是否引入了不区分大小写的字符串比较算法?

如何比较不区分大小写和不区分重音的字符串

为什么在进行不区分大小写的字符串比较时避免使用string.ToLower()?

如何进行不区分大小写的字符串比较?

如何使字符串不区分大小写

C#Expression类方法扩展,使字符串比较不区分大小写

如何在Spark RDD中比较不区分大小写的字符串?

如何比较不区分大小写的字符串?

如何构造正则表达式以比较Shell脚本中不区分大小写的字符串?

比较字符串而不区分大小写

如何比较不区分大小写的字符串

Fortran中不区分大小写的字符串比较

实体框架核心Cosmos Db-如何比较不区分大小写的字符串?

如何使字符串替换不区分大小写

EF Core postgresql字符串比较(不区分大小写)

不区分大小写的字符串数组比较

如何区分大小写比较字符串?

Puppet 中区分大小写的字符串比较

如何制作一个函数来比较字符串而不区分大小写,不使用 strcmpi()

vuex ORM中的'where'子句是否可以不区分大小写的字符串比较?

= 在 Delphi 中是区分大小写还是不区分字符串的比较?