Как сравнить два числа в штучной упаковке на равенство в .NET? - PullRequest
3 голосов
/ 17 ноября 2010

Предположим, у меня есть следующий, совершенно бессмысленный код:

object val1 = 1;
object val2 = 1l;

Ниже приведено ложное значение, потому что два объекта в штучной упаковке не совпадают, поскольку объекты у них разныетипы:

val1 == val2

То же самое относится к:

val1.Equals(val2)

Или:

Object.Equals(val1, val2)

Какой самый простой способ сравнить их так же, какЕсли бы я не знал типы во время выполнения (и, следовательно, не мог бы разыграть), то сделал бы следующее:

1 == 1l;

Другими словами, как мне получить значение сравнение на основе двух чисел в штучной упаковке ?

Ответы [ 4 ]

4 голосов
/ 13 января 2012

Попробуйте использовать ключевое слово dynamic . Он разрешит объекты к вашим типам значений, чтобы вы могли использовать оператор == и сравнивать истинные значения:

(dynamic)val1 == (dynamic)val2
3 голосов
/ 17 ноября 2010

Если это конкретный тип объекта, вы можете использовать метод .Equals() для проверки равенства - либо один из стандартных типов .Net, который его поддерживает, либо добавив его к своим собственным объектам.

Failingчто вы можете привести их к известному типу, если заранее знаете, что это будет

Хорошие очки от cdhowie, так что ...

Я могу что-то упустить, но вы знаете, что оничисла из заголовка вопроса / тегов - если у вас нет некоторых пользовательских типов для хранения чисел, вы не можете просто привести все к Long (или ULong, если + ve только) и затем сравнить?

1 голос
/ 17 ноября 2010

Если вы не знаете тип, то, я думаю, вам придется подумать, чтобы выяснить, какие средства сравнения данных требуются.

0 голосов
/ 05 июля 2011

Я посмотрел на System.ValueType.Equals (obj, obj)

Однако, используя Reflector, вы можете увидеть, что этот метод специально возвращает false, если типы не совпадают,

Вы можете попробовать расширить свой собственный метод, скажем, object.ValueEquals (obj, obj) , используя код из Reflector и исключив эту проверку.

Стоит попробоватья бы сказал.

...