【发布时间】:2012-11-07 15:15:19
【问题描述】:
我有一个返回对象的方法,该对象可以是多种不同数据类型中的一种,包括字符串、数字和布尔值;在某些时候我需要比较从这个方法返回的两个值的相等性。我使用 == 而不是 Equals() 因为我需要不同的数字类型来比较 - 即。 3 == 3.0 - 对于字符串和数字来说效果很好,但由于某种原因,当我比较布尔值时它会下降。
解决此问题的最佳方法是什么?我宁愿不必检测类型并强制转换为 bool,但如果没有其他解决方案我会这样做
我的代码如下所示:
private object GetValue() {
// does some stuff, returns either a boolean, string or number value
}
var value1 = GetValue();
var value2 = GetValue();
if (value1 == value2) {
// do something
}
【问题讨论】:
-
==不适合你。时期。(object)"a" ==new String(new[]{'a'})是假的。 -
(object)1 == (object)1.0 false .net 4.0
-
您是否尝试过创建 3 个单独的函数(重载),每个函数都返回正确的类型,而不必使用 Object?或者也许创建一些基本的泛型类来接受 T?
-
这通常是一个微不足道的问题,除了你假设不同的类型有时需要被认为是相同的。如果您可以将所有数字类型转换为单一类型(即将所有整数类型转换为
double),那么问题将是微不足道的,只需使用object.Equals。 -
@JordanWallwork 您能否提供更多详细信息 GetValue() 函数的作用?看来您可以制定其他解决方案而不返回 Object..
标签: c# casting boolean equality value-type