如果声明在类型转换后不起作用

时间:2017-01-07 00:18:38

标签: c# reflection types

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

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)。我真的不知道这里有什么问题,如果有人试过这个,那么获得一些想法会很好。

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

1 个答案:

答案 0 :(得分:3)

由于

$results = $db->query("SELECT url FROM questions 
        INNER JOIN tracking ON 
        questions.id != tracking.q_id 
        WHERE tracking.user_id = '$id' 
        LIMIT 1 ORDER BY RAND()");

$rows = $results->fetch_array();

比较类型object value = 0; object value1 = 0; if (value == value1) // will be always false { } 的两个值时,等于运算符object比较它们的引用 - 两个对象是否引用相同的实例。

而是使用静态方法==,在object.Equals案例中将int使用value.Equals(value1),如果实例表示值类型将会&#34; unbox&#34;他们并比较他们的价值(0 == 0)

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

}

Object.Equals(objA, objB)如何在MSDN上运行:

  
      
  1. 确定两个对象是否代表同一个对象   参考。如果是,则该方法返回true。这个测试是   相当于调用ReferenceEquals方法。另外,如果   objA和objBare都为null,该方法返回true。

  2.   
  3. 确定objA或objB是否为空。如果是,则返回   假。

  4.   
  5. 如果两个对象不表示相同的对象引用和   既不是null,它调用objA.Equals(objB)并返回结果。   这意味着如果objA重写Object.Equals(Object)方法,   调用此覆盖。

  6.