como verificar a atribuibilidade de tipos em tempo de execução em c #?

A classe Type possui um método IsAssignableFrom () que quase funciona. Infelizmente, ele só retorna true se os dois tipos forem iguais ou se o primeiro estiver na hierarquia do segundo. Ele diz que o decimal não pode ser atribuído a partir de int, mas eu gostaria de um método que indique que os decimais são atribuíveis a partir de ints, mas nem sempre os ints são atribuíveis a partir de decimais. O compilador sabe disso, mas eu preciso descobrir isso em tempo de execução.

Aqui está um teste para um método de extensão.

    [Test]
    public void DecimalsShouldReallyBeAssignableFromInts()
    {
        Assert.IsTrue(typeof(decimal).IsReallyAssignableFrom(typeof(int)));
        Assert.IsFalse(typeof(int).IsReallyAssignableFrom(typeof(decimal)));
    }

Existe uma maneira de implementar IsReallyAssignableFrom () que funcione como IsAssignableFrom (), mas também passe no caso de teste acima?

Obrigado!

Editar:

Esta é basicamente a maneira como seria usada. Este exemplo não é compilado para mim, então eu tive que definir Number como 0 (em vez de 0.0M).

    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Parameter)]
    public class MyAttribute : Attribute
    {
        public object Default { get; set; }
    }

    public class MyClass
    {
        public MyClass([MyAttribute(Default= 0.0M)] decimal number)
        {
            Console.WriteLine(number);
        }
    }

Eu recebo este erro: Erro 4 Um argumento de atributo deve ser uma expressão constante, tipo de expressão ou expressão de criação de matriz de um tipo de parâmetro de atributo

questionAnswers(6)

yourAnswerToTheQuestion