Come posso verificare se un determinato tipo implementa un determinato operatore?Come verificare se un tipo sovraccarica/supporta un determinato operatore?
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);
}
}
A seguito di due controlli dovrebbero tornare true
:
typeof(CustomOperatorsClass).HasOperator(Operator.Addition)
typeof(int).HasOperator(Operator.Addition)
Già considerato. Potrebbe essere ancora la soluzione migliore, poiché continuerà a funzionare anche quando ad es. vengono aggiunti nuovi tipi predefiniti purché siano supportati gli Expression Trees. Non so quanto più lento del riflesso sarebbe, ma un metodo come "HasOperator" non dovrebbe essere chiamato spesso comunque. –
+ 1, come, il trucco buono –
sembra "programmazione guidata da eccezioni", ma devo ammettere che questo è il modo migliore per creare un metodo breve e pulito per risolvere il problema, inclusi tutti gli operatori, non solo l'aggiunta. –