如何在.NET中比较两个盒装数字的相等性?

时间:2010-11-17 17:25:21

标签: .net numbers equality

假设我有以下完全没有意义的代码:

object val1 = 1;
object val2 = 1l;

以下将返回false,因为两个盒装的对象不同,因为它们具有不同类型的对象:

val1 == val2

同样适用于:

val1.Equals(val2)

或者:

Object.Equals(val1, val2)

考虑到我在运行时不知道类型(因此无法强制转换),以下同样的方式比较这些方法的最简单方法是什么:

1 == 1l;

换句话说,如何在两个盒装数字上进行基于的比较?

4 个答案:

答案 0 :(得分:4)

尝试使用动态关键字。它会将对象解析为您的值类型,以便您可以使用==运算符并比较真值:

(dynamic)val1 == (dynamic)val2

答案 1 :(得分:3)

如果它是特定类型的对象,则可以使用.Equals()方法检查相等性 - 支持它的标准.Net类型之一,或者将其添加到您自己的对象中。

如果不这样做,如果事先知道它将是什么,你可以将它们转换为已知类型

来自cdhowie的好点......所以......

我可能会遗漏一些东西,但你知道它们是问题/标签标题中的数字 - 除非你有一些用于存储数字的自定义类型,否则你不能简单地将所有内容都转换为Long(或者如果只有+ ve,则为)然后比较?

答案 2 :(得分:1)

如果你不知道这种类型,那么我认为你必须做一些反思才能弄清楚需要比较数据的方法。

答案 3 :(得分:0)

我看了 System.ValueType.Equals(obj,obj)

但是,使用Reflector,您可以看到如果类型不匹配,此方法将特别返回false。

您可以尝试使用Reflector中的代码扩展您自己的方法,例如 object.ValueEquals(obj,obj),并取消该检查。

值得一试,我会说。