Donc j'ai cet objet, disons DoubleContainer.
public struct DoubleContainer
{
private readonly double _value;
private DoubleContainer(double value)
{
_value = value;
}
public static implicit operator double(DoubleContainer doubleContainer)
{
return doubleContainer._value;
}
public static DoubleContainer Create(double value)
{
return new DoubleContainer(value);
}
}
Le mouler fonctionne comme prévu dans presque tous les cas, sauf lorsqu'il est passé dans une fonction en tant qu'objet.
Le code suivant génère une InvalidCastException si je passe dans un DoubleContainer :
public double GetDouble(Object input)
{
return (double)input;
}
J'arrive à le faire fonctionner si j'utilise la dynamique :
public double GetDouble(Object input)
{
return (double)(dynamic)input;
}
Mon problème avec cette solution est que Visual Studio grise le (dynamic), parce qu'il devrait être redondant, donc quelqu'un pourrait le supprimer. Je ne sais pas non plus s'il y a d'autres endroits dans la base de code où ce même problème peut se produire.
Y a-t-il quelque chose que je puisse faire à mon implémentation de DoubleContainer pour que ma première implémentation de GetDouble() fonctionne ? J'ai essayé d'ajouter un autre opérateur de conversion implicite d'Object à DoubleContainer, mais "les conversions définies par l'utilisateur vers ou depuis une classe de base ne sont pas autorisées".....