¿Cómo puedo verificar si un determinado tipo implementa un determinado operador?¿Cómo verificar si un tipo sobrecarga/admite un determinado operador?
struct CustomOperatorsClass
{
public int Value { get; private set; }
public CustomOperatorsClass(int value)
: this()
{
Value = value;
}
static public CustomOperatorsClass operator +(
CustomOperatorsClass a, CustomOperatorsClass b)
{
return new CustomOperatorsClass(a.Value + b.Value);
}
}
Después de dos cheques deben volver true
:
typeof(CustomOperatorsClass).HasOperator(Operator.Addition)
typeof(int).HasOperator(Operator.Addition)
Ya lo consideré. En realidad, esta podría ser la mejor solución, ya que continuará funcionando incluso cuando, por ejemplo, Se agregan nuevos tipos incorporados siempre que se admitan árboles de expresiones. No sé cuánto más lento que el reflejo sería, pero un método como 'HasOperator' se supone que no se llama a menudo de todos modos. –
+ 1, como, buen truco –
parece "programación impulsada por excepciones", pero tengo que admitir que esta es la mejor manera de hacer un método breve y limpio para resolver el problema, incluidos todos los operadores, no solo la adición. –