我有两个均为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
的形式出现。测试脚本仅用于测试。
答案 0 :(得分:3)
这是我的主张。您检查值是否可比(int
和string
可比),如果是,则将它们转换为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)