我有两个要比较的值:
var value1 = someProperty.GetValue(x);
var value2 = someOtherProperty.GetValue(y);
if (value1 == value2)
{
// do something
}
其中 someProperty
和 someOtherProperty
是 PropertyInfo
对象。换句话说,我通过反射获取值。
问题是,如果 value1
最终是一个 int
,值为 4
,而 value2
最终是作为一个值为 4
的 byte
,我希望能够分辨出它们是相同的。有没有一种方法可以比较两个数值而不考虑它们的类型?最好仍然允许比较两个字符串(所以我不能真正将 value2
转换为 int
因为它可能会证明它是一个 字符串
).
最佳答案
一种选择是使用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
关于c# - 类型未知时比较数字类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27972266/