Оператор сравнения с использованием отражения

StackOverflow https://stackoverflow.com/questions/3761887

Вопрос

Я хочу сравнить два значения во время выполнения с использованием отражения. Я использовал Comparer.default.compare (x, y) для этого, но я пришел, чтобы понять, что это не адекватно. Допустим, я хочу сравнить двойной до одного (1,0 == 10). Comparer.Default будет выбрасывать исключение, потому что он настаивает на том, что оба значения должны быть одинаковым типом (двойным). Однако для этого существует явное преобразование, что действительно то, что я хочу использовать.

Итак, почему я не могу просто использовать Convert.Changetype? Возьмите случай 1,25> 1 (двойное> целое число). Если я попробую Convert.Changetype (1.25, typeof (int)) на 1.25, я получу 1, и вышеупомянутое утверждение не удастся, когда действительно 1.25 -> 1.

Итак, может кто-то, пожалуйста, предложите способ вызовов явного сравнения (если он существует), что тип определяет?

Спасибо.

Это было полезно?

Решение

Вы используете C # 4 и .NET 4? Если это так, это действительно легко, используя динамические набравки:

dynamic x = firstValue;
dynamic y = secondValue;
if (x > y) // Or whatever

Компилятор выполняет все соответствующие преобразования для вас.

Другие советы

Если C # 4 является вариантом, Предложение Jon Skeet об использовании динамического скорее всего идеал.

Если это не так, то ...

Там нет явного сравнения. Компилятор, в компиляционном времени, делает преобразование, затем вызывает соответствующее сравнение.

Ваша лучшая ставка - использовать Convertry.Changetype для преобразования в более широкий тип, а затем выполнить сравнение в результате. Если вы не хотите обрабатывать проверку всех типов, вы обычно можете преобразовать обе стороны в decimal ценности, затем используйте одно сравнение, чтобы проверить их, как decimal должен обрабатывать все ваши значения адекватно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top