2015-04-20 2 views
1
if(setting.ConvertedValue.Equals(m_MatchingModules[i].Group[j])) 
{ 
} 

Я работаю над проектом, и мне нужно проверить код выше, если значения равны. Я никогда не вхожу в инструкцию if. Моя переменная ConvertedValue имеет тип Object, а Group - это список Int s. Я видел в отладчике, что оба значения равны 3, но .Equals не находит их равными.C# сравнение двух объектов, если они равны

+0

_ "Convertedvalue имеет тип объекта" _, какой тип объекта? Может быть, вот так: '' 3 "'? –

+3

Просьба представить краткую, но полную программу, демонстрирующую проблему. На данный момент у нас недостаточно информации, чтобы помочь вам. –

+0

ConvertedValue имеет объект типа и имеет значение 3 (int not string). –

ответ

1
public override bool Equals(object obj) 
{ 
    Test test = obj as Test; 
    if (obj == null) 
    { 
     return false; 
    } 
    return Value == test.Value && 
     String1 == test.String1 && 
     String2 == test.String2; 
} 
0

Попробуйте использовать == вместо этого. Равны для проверки равенства объекта и могут возвращать false, если тип отличается, даже если значение одинаково для типов значений.

someInt.Equals(someLong); // false 

someInt == someLong; // true 
+0

Я так не думаю - в быстром тестировании. Equals (someLong) 'также возвращает« true ». – ChriPf

+0

https://dotnetfiddle.net/1G0bri – garryp

+0

Не могли ли проголосовавшие объяснить себя? – garryp

0

Попробуйте использовать метод ValueType.Equals.

if(ValueType.Equals(setting.ConvertedValue,m_MatchingModules[i].Group[j])) 
Смежные вопросы