c# - 类型未知时比较数字类型

标签 c#

我有两个要比较的值:

var value1 = someProperty.GetValue(x);
var value2 = someOtherProperty.GetValue(y);

if (value1 == value2)
{
   // do something
}

其中 somePropertysomeOtherPropertyPropertyInfo 对象。换句话说,我通过反射获取值。

问题是,如果 value1 最终是一个 int,值为 4,而 value2 最终是作为一个值为 4byte,我希望能够分辨出它们是相同的。有没有一种方法可以比较两个数值而不考虑它们的类型?最好仍然允许比较两个字符串(所以我不能真正将 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/

相关文章:

c# - 使用 JSON.NET 将 JSON 反序列化为匿名对象

c# - 内联组合数组 - LINQ

c# - 如何在 C# 中使用 RSA 加密文件(大数据)

c# - 如何在字符串 C# 的最后 3 个字符之前插入空格?

c# - 使用 SendInput 时,如何判断接收窗口何时收到并处理了消息?

c# - 反编译使用 extern 关键字实现的方法

c# - 使用 TrackDependency 是获取业务逻辑层 .NET 库类指标的正确方法吗?

c# - 尝试压缩 Sha1 的大小,也许是制作唯一标识符的更好选择

c# - 如何找到 .NET 的外部源代码?

c# - 使用 System.Web.Optimization 捆绑,如何访问构建捆绑的结果?