Question

J'obtiens l'erreur de compilation suivante avec le code source suivant:

Erreur de compilation:

Le type de l'expression conditionnelle ne peut pas être déterminé car il n'y a pas de conversion implicite entre '' et 'MonEnum'

Code source

public enum MyEnum
{
    Value1, Value2, Value3
}

public class MyClass
{
    public MyClass() {}
    public MyEnum? MyClassEnum { get; set; }
}

public class Main()
{
   object x = new object();

   MyClass mc = new MyClass()
   {
        MyClassEnum = Convert.IsDBNull(x) : null ? 
            (MyEnum) Enum.Parse(typeof(MyEnum), x.ToString(), true)
   };
}

Comment puis-je résoudre cette erreur?

Était-ce utile?

La solution

Je pense que vous devez simplement convertir le résultat de Enum.Parse en MyEnum? . C'est le cas avec inable nullable au moins. Exemple:

int? i;
i = shouldBeNull ? null : (int?) 123;

Donc:

MyClassEnum = Convert.IsDBNull(x)
    ? null
    : (MyEnum?) Enum.Parse(typeof(MyEnum), x.ToString(), true)

Autres conseils

Votre code contient une erreur de syntaxe: les positions ':' et '?' doit être échangé:

MyClassEnum = Convert.IsDBNull(x) ? null : 
            (MyEnum) Enum.Parse(typeof(MyEnum), x.ToString(), true)

BTW:

pour autant que je sache, la méthode recommandée consiste à utiliser un élément enum nommé "Aucun" au lieu d'un enum Nullable, par exemple:

public enum MyEnum
{
    None, Value1, Value2, Value3
}

et

MyClassEnum = Convert.IsDBNull(x) ? MyEnum.None : 
            (MyEnum) Enum.Parse(typeof(MyEnum), x.ToString(), true);

Je pense que vous aurez juste besoin de convertir le résultat en (MyEnum?) plutôt qu'en (MyEnum)?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top