Nullable Enum question de type nullable
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?
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)?