Класс Type имеет метод IsAssignableFrom(), который почти работает. К сожалению, он возвращает true только в том случае, если два типа являются одинаковыми или первые находятся в иерархии второго. В нем говорится, что десятичное значение не может быть назначено из int, но мне нужен метод, который указывает, что десятичные знаки назначаются из ints, но ints не всегда назначаются из десятичных знаков. Компилятор знает это, но мне нужно понять это во время выполнения.
Вот тест для метода расширения.
[Test]
public void DecimalsShouldReallyBeAssignableFromInts()
{
Assert.IsTrue(typeof(decimal).IsReallyAssignableFrom(typeof(int)));
Assert.IsFalse(typeof(int).IsReallyAssignableFrom(typeof(decimal)));
}
Есть ли способ реализовать IsReallyAssignableFrom(), который будет работать как IsAssignableFrom(), но также проходит тестовый пример выше?
Спасибо!
Edit:
Это в основном способ, которым он будет использоваться. Этот пример не компилируется для меня, поэтому мне пришлось установить 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 Аргумент атрибута должен быть константным выражением, выражением типаof или выражением создания массива типа параметра атрибута