我正在使用反射,我需要进行业务验证,因此我创建了一个以下列方式声明的类:
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)。我真的不知道这里有什么问题,如果有人试过这个,那么获得一些想法会很好。
提前感谢你,快乐的代码。
答案 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上运行:
确定两个对象是否代表同一个对象 参考。如果是,则该方法返回true。这个测试是 相当于调用ReferenceEquals方法。另外,如果 objA和objBare都为null,该方法返回true。
确定objA或objB是否为空。如果是,则返回 假。
- 醇>
如果两个对象不表示相同的对象引用和 既不是null,它调用objA.Equals(objB)并返回结果。 这意味着如果objA重写Object.Equals(Object)方法, 调用此覆盖。