using System; using System.Text; namespace ConsoleApplication1 { /// /// Définit les options possibles sur une /// [Flags] public enum OptionsVoiture : byte { Aucune = 0, Aileron = 1, ToitOuvrant = 2, RetroviseursElectriques = 4, VitresTeintees = 8, Neons = 16, PriseAir = 32, Halogenes = 64, Rabaissement = 128, Toutes = Byte.MaxValue } class Voiture { public OptionsVoiture Options { get; set; } public override string ToString() { StringBuilder sb = new StringBuilder(); // Comparaisons simples if ((this.Options & OptionsVoiture.Aileron) == OptionsVoiture.Aileron) sb.Append("Aileron, "); if ((this.Options & OptionsVoiture.ToitOuvrant) != 0) sb.Append("ToitOuvrant, "); if ((this.Options & OptionsVoiture.RetroviseursElectriques) != 0) sb.Append("RetroviseursElectriques, "); if ((this.Options & OptionsVoiture.VitresTeintees) != 0) sb.Append("VitresTeintees, "); if ((this.Options & OptionsVoiture.Neons) != 0) sb.Append("Neons, "); if ((this.Options & OptionsVoiture.PriseAir) != 0) sb.Append("PriseAir, "); if ((this.Options & OptionsVoiture.Halogenes) != 0) sb.Append("Halogenes, "); if ((this.Options & OptionsVoiture.Rabaissement) != 0) sb.Append("Rabaissement, "); // Comparaison à OptionsVoiture.Toutes if (this.Options == OptionsVoiture.Toutes) sb.Append("Toutes, "); if (sb.Length > 0) sb.Remove(sb.Length - 2, 2); // Esthétique, on supprime ", " return sb.ToString(); } } class Program { static void Main(string[] args) { // Définition simple var vt1 = new Voiture(); vt1.Options = OptionsVoiture.ToitOuvrant; Console.WriteLine("OptionsVoiture.ToitOuvrant"); Console.WriteLine(vt1.ToString()); // Définitions multiples Console.WriteLine(); var vt2 = new Voiture(); vt2.Options = OptionsVoiture.Aileron | OptionsVoiture.ToitOuvrant | OptionsVoiture.Neons; Console.WriteLine("OptionsVoiture.Aileron | OptionsVoiture.ToitOuvrant | OptionsVoiture.VitresTeintees"); Console.WriteLine(vt2.ToString()); // Définition de OptionsVoiture.Toutes Console.WriteLine(); var vt3 = new Voiture(); vt3.Options = OptionsVoiture.Toutes; Console.WriteLine("OptionsVoiture.Toutes"); Console.WriteLine(vt3.ToString()); // Comparaison multi-critères Console.WriteLine(); var vt4 = new Voiture(); vt4.Options = OptionsVoiture.Aileron | OptionsVoiture.ToitOuvrant | OptionsVoiture.Neons; var aileronEtNeons = (OptionsVoiture.Aileron | OptionsVoiture.Neons); var aileronEtPriseAir = OptionsVoiture.Aileron | OptionsVoiture.PriseAir; Console.WriteLine("OptionsVoiture.Aileron | OptionsVoiture.ToitOuvrant | OptionsVoiture.Neons"); Console.WriteLine("Aileron et Neons? " + ((vt4.Options & aileronEtNeons) == aileronEtNeons)); bool isAileronNeons = (vt4.Options & aileronEtNeons) == aileronEtNeons; Console.WriteLine("Aileron et PriseAir? " + ((vt4.Options & aileronEtPriseAir) == aileronEtPriseAir)); // Définitions de toutes les valeurs, puis exclusion Console.WriteLine(); var vt5 = new Voiture(); vt5.Options = OptionsVoiture.Toutes; vt5.Options &= ~(OptionsVoiture.Halogenes | OptionsVoiture.Rabaissement); Console.WriteLine("OptionsVoiture.Toutes sauf (Halogenes + Rabaissement)"); Console.WriteLine(vt5.ToString()); Console.ReadLine(); } } }