Как проверить присваиваемость типов во время выполнения в C #?

Класс Type имеет метод IsAssignableFrom (), который почти работает. К сожалению, он возвращает true, только если два типа совпадают или первый находится в иерархии второго. В нем говорится, что десятичная дробь не может быть назначена из int, но я бы хотел метод, который бы указывал, что десятичные дроби можно назначать из целых, но целые не всегда можно назначить из десятичных чисел. Компилятор знает это, но мне нужно выяснить это во время выполнения.

Вот тест для метода расширения.

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

Есть ли способ реализовать IsReallyAssignableFrom (), который бы работал как IsAssignableFrom (), но также прошел тестовый пример выше?

Спасибо!

Редактировать:

Это в основном так, как он будет использоваться. Этот пример не компилируется для меня, поэтому я должен был установить Number на 0 (вместо 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);
        }
    }

Я получаю эту ошибку: Ошибка 4 Аргумент атрибута должен быть выражением константы, выражением typeof или выражением создания массива типа параметра атрибута

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

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