gpt4 book ai didi

c# - If 语句在类型转换后不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 23:05:09 25 4
gpt4 key购买 nike

我正在使用反射并且需要业务验证,所以我创建了一个以下列方式声明的类:

public class NullChecker<T>

我在那里创建了一个运行该验证的方法:

public static T ReturnValue2(T serviceValue, T dbValue, Type propType)    
{
T result;
object svcValueConverted = serviceValue;
object defaultValue = null;
if (propType.IsPrimitive)
{
svcValueConverted = GetConvertedValue(serviceValue);
defaultValue = GetDefaultValue(propType);
var x = svcValueConverted.GetType();
var y = defaultValue.GetType();
}
if (svcValueConverted == defaultValue)
{
result = dbValue;
}
return result;
}

当 Int.32 对象类型出现时,我遇到了这个问题,即使转换后的值 (0) 和默认值 (0) 相同,if 语句也不起作用并跳转到下一行(即 0 == 0)。我真的不知道这里的问题是什么,如果有人对此进行过实验,那么得到一些想法会很好。

提前谢谢你,快乐的代码。

最佳答案

因为

object value = 0;
object value1 = 0;

if (value == value1) // will be always false
{

}

当您比较 object 类型的两个值时,然后等于运算符 == 比较它们的引用 - 两个对象是否引用相同的实例。

而是使用静态方法 object.Equals,在 int 情况下将使用 value.Equals(value1),在实例表示的情况下值类型将“拆箱”它们并比较它们的值 (0 == 0)

If (Equals(value, value1)) // In your case it will be true
{

}

Object.Equals(objA, objB) 的工作原理来自 MSDN:

  1. It determines whether the two objects represent the same object reference. If they do, the method returns true. This test is equivalent to calling the ReferenceEquals method. In addition, if both objA and objBare null, the method returns true.

  2. It determines whether either objA or objB is null. If so, it returns false.

  3. If the two objects do not represent the same object reference and neither is null, it calls objA.Equals(objB) and returns the result. This means that if objA overrides the Object.Equals(Object) method, this override is called.

关于c# - If 语句在类型转换后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41516435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com