比较对象是否包含字符串或整数

时间:2018-08-13 10:00:00

标签: c#

我有两个均为object类型的变量。 它们可能包含整数或字符串,但始终都是相同的类型。 有没有一种方法可以比较它们以查看哪个更大(或相同)。

我知道我可以像这样测试平等性:

if (a.Equals(b))
    ...

但是我该怎么做:

if (a > b)
    ...

if (a < b)
    ...

object没有compareTo方法

测试代码:

int i1 = 7;
int i2 = 12;

int result = compareValues((object)i1, (object)i2);

string s1 = "abcd";
string s2 = "efg";

int result = compareValues((object)s1, (object)s2);

...

public int compareValues((object)a, (object)b)
{
    if (a.Equals(b))
        return 0;

    if (a < b)
        return -1;

    return 1;
}

EDIT

我无法控制变量-它们以object的形式出现。测试脚本仅用于测试。

3 个答案:

答案 0 :(得分:3)

这是我的主张。您检查值是否可比(intstring可比),如果是,则将它们转换为IComparable并使用CompareTo

fiddle有用

public static int CompareValue(object a, object b)
{
    return (a as IComparable).CompareTo(b as IComparable);      
}

答案 1 :(得分:2)

我认为,您应该先检查数据类型。您永远不会知道您是否在某个地方搞砸了。 (而这正是这种设计的问题,您能做到更多类型安全吗?)

if (a is int ai && b is int bi)
{
    // now compare ai en bi
    return ai.CompareTo(bi);
}
else if (a is string astr && b is string bstr)
{
    // now compare astr en bstr
    return astr.CompareTo(bstr);
}
else
{
    // a or b is null or have different types.
}

答案 2 :(得分:-4)

Int32类型有一个CompareTo方法...您可以只使用它,也可以将int强制转换为它。

您可以使用对象的GetType()来确定是否有字符串或整数