比较c#中的框对象
本文关键字:对象 比较 | 更新日期: 2023-09-27 18:18:04
是否有可能在编译时不知道的情况下比较两个对象 ?例如,如果我有一个object{long}
和object{int}
,有没有一种方法可以知道盒子里的值是否相等?
我的方法检索了两个通用的object
s,并且没有办法知道它们在编译时的内部类型是什么。现在,比较是由以下代码进行的:
_keyProperties[x].GetValue(entity, null).Equals(keyValues[x])
其中,例如,_keyProperties[x].GetValue(entity, null)
是object{long}
, keyValues[x]
是object{int}
(但它们也可以反转)。
我需要这个,因为我正在为我的单元测试构建一个模拟存储库,并且我已经开始包括这里描述的通用存储库实现。这个实现在它的Find
方法中比较了两个通用的伪db键。
对于您的情况来说,这可能太慢了,但是您可以使用dynamic
进行测试,如下面的代码所示:
object obj1 = 1;
object obj2 = 1.0;
if (obj1.Equals(obj2))
Console.WriteLine("Yes");
else
Console.WriteLine("No"); // Prints "No" as you'd expect.
if ((dynamic) obj1 == (dynamic) obj2)
Console.WriteLine("Yes"); // Prints "Yes" because it handles trivial conversions.
else
Console.WriteLine("No");
请注意,使用dynamic
可能很慢(尽管为支持它而生成的代码被缓存,因此至少该部分不会执行多次)。
如果类型不相关,也会出现一些问题——更多讨论请参见这里。
例如,这会抛出一个异常:
object obj1 = "Hello";
object obj2 = 1.0;
if ((dynamic) obj1 == (dynamic) obj2) // Throws an exception!
Console.WriteLine("Yes");
else
Console.WriteLine("No");