我想要比较两个值:
var value1 = someProperty.GetValue(x);
var value2 = someOtherProperty.GetValue(y);
if (value1 == value2)
{
// do something
}
其中someProperty
和someOtherProperty
是PropertyInfo
个对象。换句话说,我通过反思来获取值。
问题是,如果value1
最终为int
,其值为4
,而value2
最终为byte
,其值为4
我希望能够告诉他们是一样的。有没有一种方法来比较两个数值而不考虑它们的类型?最好还是允许比较两个字符串(因此我无法真正地将value2
转换为int
,因为它可能会导致它{{1} })。
答案 0 :(得分:8)
一种选择是使用dynamic
。这将使编译器发出动态调用站点,并要求DLR在运行时启动比较对象。
object obj1 = (int)4;//Default is int, but added to make intent clear
object obj2 = (byte)4;
Console.WriteLine(obj1 == obj2);
Console.WriteLine((dynamic)obj1 == (dynamic)obj2);
打印
False
True