首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IComparable IgnoreCase

IComparable IgnoreCase
EN

Stack Overflow用户
提问于 2012-05-23 03:09:45
回答 2查看 379关注 0票数 0

我正在写一个函数来比较两个IComparable类型的值,如果不相等就抛出。基本上,重新生成断言。是的,我知道我在重新发明轮子。

代码语言:javascript
复制
    public static void IsEqual<T>(T Value1, T Value2) where T : IComparable<T>
    {
        if (0 != Value1.CompareTo(Value2))
        {
            throw new ApplicationException("Fail");
        }
    }

除了字符串之外,一切都很好,我希望可以忽略大小写。"AA“vs "aa”

当T是一个字符串时,我特别想覆盖这个方法,这样我就可以使用String.Compare和忽略大小写。如果有另一个参数,用户可以指定字符串是否应该被忽略,这也会很酷(但是,这对于int这样的其他类型是没有用的,所以看起来有点像一个令人困惑的/糟糕的设计。我对这里的建议持开放态度)。

有什么好方法可以做到这一点吗?我也愿意换成不同于IComparable的界面,起初我认为这是最适合这项工作的界面,但现在意识到我可能错了。

代码语言:javascript
复制
where T : IComparable<T>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-23 03:27:00

您可以尝试:

代码语言:javascript
复制
public static void IsEqual<T>(T Value1, T Value2) where T : IComparable<T>
    {
        if (typeof(T) == typeof(String))
        {
            if (String.Compare(Value1.ToString(), Value2.ToString(), true) != 0)
            {
                throw new ApplicationException("Fail");
            }
        }
        else if (0 != Value1.CompareTo(Value2))
        {
            throw new ApplicationException("Fail");
        }
    }
票数 1
EN

Stack Overflow用户

发布于 2012-05-23 03:25:01

您可以创建另一个函数,专门用于字符串。

代码语言:javascript
复制
public static void IsEqual(string value1, string value2) 
{
  if (string.Compare(value1, value2, true) != 0)
    throw new ApplicationException("Fail for strings");
}

然后,如果你要调用IsEqual(1, 1),你的泛型重载将被调用,但如果你调用IsEqual("A", "a"),字符串重载将被调用。然后,如果需要,您可以简单地为字符串重载添加另一个可选参数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10708490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档