Voici mon cas: J'ai un type de valeur qui est enveloppé dans un autre type avec des convertisseurs implicites appropriés. Si je jette un type enveloppé à un objet, puis que j'essaie d'obtenir la valeur d'origine, je peux le faire en cast en deux étapes seulement. Si simplifié mon code est le suivant:
public enum MyEnum : int
{
First,
Second
}
public class Test<T>
{
public Test(T val)
{
Value = val;
}
private T Value { get; set; }
public static implicit operator T(Test<T> m)
{
return m.Value;
}
public static implicit operator Test<T>(T m)
{
var res = new Test<T>(m);
return res;
}
}
static void Main()
{
object res = new Test<MyEnum>(MyEnum.First);
Console.WriteLine((MyEnum)(Test<MyEnum>)res);
Console.WriteLine((MyEnum)res);
}
Première "Console.WriteLine" fonctionne bien. Le deuxième échoue.
Est-il possible de modifier ce comportement et de le faire fonctionner sans double diffusion?
MISE À JOUR 1
Je dois utiliser l'objet à la valeur (dans l'application réelle, je dois jeter des biens ComboBox.SelectedItem et je ne veux pas ajouter la propriété supplémentaire pour ComboBox, parce que je vais devoir changer mon code d'interaction UI partout).
MISE À JOUR 2
conversions implicites vers et à partir System.Object ne sont pas autorisés.
MISE À JOUR 3
Mis à jour mon exemple de code pour refléter tout le problème.
C'est ce que j'ai trouvé moi-même - Extender Merci, je vais le marquer comme réponse. –