Это должен быть ответ. Вопрос был об использовании <,>, <= и т. Д. И интерфейс IComparable дает ответ на этот вопрос.

я пытаюсь добиться прямого сравнения значений примитивных типов в штучной упаковке.

((object)12).Equals((object)12); // Type match will result in a value comparison,
((object)12).Equals((object)12d); // but a type mismatch will not. (false)
object.Equals((object)12,(object)12d); // Same here. (false)

Я понимаю «почему». Я просто не вижу «как».

Типы неизвестны до времени выполнения, где они могут быть любыми примитивными типами из источника данных. Это включает в себя строки, datetime, bools и т. Д. Я пошел по уродливому пути написания метода расширения, который обрабатывает оба типа, а затем приводит их в соответствие перед сравнением '==': (Для полноты я включил каждый примитивный тип плюс те, которые меня интересовали)

public static bool ValueEquals(this object thisObj, object compare)
    {
        if (thisObj is int)
        {
            int obj = (int)thisObj;
            if (compare is int)
                return (obj == (int)compare);
            if (compare is uint)
                return (obj == (uint)compare);
            if (compare is decimal)
                return (obj == (decimal)compare);
            if (compare is float)
                return (obj == (float)compare);
            <... and so on for each primitive type ...>
        }
        if (thisObj is uint)
        {
            uint obj = (uint)thisObj;
            if (compare is int)
                return (obj == (int)compare);
            if (compare is uint)
                return (obj == (uint)compare);
            <... Again for each primitive type ...>
        }
        if (thisObj is decimal)
        {
            decimal obj = (decimal)thisObj;
            if (compare is int)
                return (obj == (int)compare);
            <... Etc, etc ...>

Получившийся метод оказался длиной более 300 строк, что было хорошо (но отвратительно), но теперь мне нужно сделать больше, чем просто '=='. Мне нужно>, <, <=,> =,! =.

Есть ли что-то в Reflection, что я мог бы использовать для сравнения типов в штучной упаковке?

Вообще ничего?

Ответы на вопрос(2)

Ваш ответ на вопрос