2014-11-24 3 views
0

У меня есть два объекта типа SqlServer.Smo.Column. Если я пытаюсь сравнить одно свойство какC# Ошибка сравнения объектов

ColumnaOrigen.Properties["DataType"].Value != ColumnaDestino.Properties["DataType"].Value 

Он вернется true даже оба значения numeric.

В отладчике показан тип object{string}; то же самое происходит и с другими типами данных, такими как object{bool}

  1. Почему это происходит?

  2. Как я могу сравнить эти значения, чтобы получить правильный ответ?

+0

Вы пытались использовать «Type.Equals»? http://msdn.microsoft.com/en-us/library/3ahwab82%28v=vs.110%29.aspx –

+0

Обычно тесты на равенство выполняются с использованием Equals-метода. Для простых типов данных, таких как 'int',' bool' ... вы также можете использовать '==' или '! ='. Насколько я знаю, для строк мы используем вид пула, поэтому '' 1 "==" 1 "' работает. – HimBromBeere

ответ

4

1- Почему это происходит?

Поскольку вы не сравниваете значения переменных, а их ссылки. Поскольку обе переменные object, == звонки Object.ReferenceEquals.

2- Как мне сделать, чтобы сравнить эти значения, чтобы получить правильный ответ?

Если в обоих случаях string, бросьте их и сравните их как строки.

string a = ColumnaOrigen.Properties["DataType"].Value as string; 
string b = ColumnaDestino.Properties["DataType"].Value as string; 

if (!string.Equals(a, b)) 
{ } 
Смежные вопросы