2017-01-07 3 views
1

Я работаю с отражением, и мне нужно подтверждение бизнес, поэтому я создал класс, объявленный следующим образом:Если оператор не работает после Тип Convertion

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) то же самое, если заявление не работает и перейти к следующей строке (т.е. 0 == 0). Я действительно не знаю, в чем проблема, если кто-то экспериментировал с этим. Было бы неплохо получить некоторые идеи.

Благодарим u заблаговременно, счастливый код.

+1

Как '' GetConvertedValue' и GetDefaultValue' реализуются? Это два черных ящика. И вы спрашиваете, почему два черных ящика возвращают разные значения. –

ответ

3

Поскольку

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. Он определяет два объекта, представляют ли один и тот же объект ссылку. Если это так, метод возвращает true. Этот тест равен , что эквивалентно вызову метода ReferenceEquals. Кроме того, если как objA, так и objBare null, метод возвращает true.

  2. Определяет, является ли objA или objB нулевым. Если это так, он возвращает false.

  3. Если оба объекта не представляют одну и ту же ссылку на объект, а не равно null, он вызывает objA.Equals (objB) и возвращает результат. Это означает, что если objA переопределяет метод Object.Equals (Object), вызывается это переопределение.

+0

Спасибо, что так много @Fabio, я получаю это сейчас –

 Смежные вопросы

  • Нет связанных вопросов^_^