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