2010-06-25 6 views
1

Я написал код для проверки равенства между значениями столбцов в DataTables, когда тип столбца неизвестен.Тестирование равенства значений DataColumn в C#

Тестирование непосредственно, как это:

row["Foo"] == row["Bar"] 

всегда приводит к ложным, предположительно потому, что реализация объекта Равных использует ReferenceEquals.

Так что я прибегал к:

row["Foo"].ToString() == row["Bar"].ToString() 

Это работает (по крайней мере, за исключением случаев, я сталкивался до сих пор), но это, кажется, немного, ну, manky.

Может ли кто-нибудь подумать о причине, я не должен этого делать, или предложить лучший способ? Помните, что я не знаю типы столбцов во время разработки, поэтому отливка не является вариантом.

Благодаря

Дэвид

+0

Итак, вы ищете способ надежного сравнения равенства двух объектов, которые могут быть разных типов? –

+0

Можете ли вы объяснить немного больше, почему бы вам не знать типы во время кодирования? –

+0

Джастин - извините, я не объяснил. Они будут одного типа, но тип неизвестен во время разработки. – David

ответ

3

Пробег: row["Foo"].Equals(row["bar"]).

Когда вы сравниваете объекты с использованием == и не существует предопределенного или определяемого пользователем оператора ==, C# будет сравнивать их с помощью ссылочного равенства. Если вы хотите вызвать метод Equals, вам необходимо записать его как вызов метода.

+0

Да, это работает! Спасибо! – David

1

row["Foo"].Equals(row["Bar"])?

+0

Вы сравниваете, если оба объекта имеют одну и ту же ссылку, не так ли? –

+0

@ NazGul если только сравнение. – Andrey

+0

Это тот же (правильный) ответ, что и Quartermeister. Я отметил его как правильно, потому что не мог сказать, что было первым, и это было выше страницы. Сожалею! – David

0

Почему бы не использовать Equals, если они являются строкой.

row["foo"].ToString().Equals(row["Bar"].ToString()); 
+0

Почему бы не использовать ==, что я уже делаю? – David