Comparações de tipo de valor em caixa

O que estou tentando obter aqui é uma comparação direta de valores de tipos primitivos in a bo

((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)

Eu entendo o 'porquê'. Só não vejo um 'como'.

Os tipos são desconhecidos até o tempo de execução, onde poderiam ser qualquer tipo primitivo de uma fonte de dados. Isso inclui strings, datetime, bools, etc. Eu segui a feia rota de escrever um método de extensão que funciona com os dois tipos e depois lança antes de fazer uma comparação '==': (Para completar, incluí todos os tipos primitivos , mais aqueles em que eu estava interessado)

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 ...>

O método resultante acabou por ter mais de 300 linhas, o que foi bom (mas hediondo), mas agora preciso fazer mais do que apenas '=='. Eu preciso de>, <, <=,> =,! =.

Existe alguma coisa no Reflection que eu possa usar para comparações de tipo de valor em caix

Nada mesmo

questionAnswers(2)

yourAnswerToTheQuestion