J'ai ce ENUM:C#: Enum.IsDefined sur les drapeaux combinés
[Flags]
public enum ExportFormat
{
None = 0,
Csv = 1,
Tsv = 2,
Excel = 4,
All = Excel | Csv | Tsv
}
Je suis en train de faire une enveloppe sur ce (ou tout, vraiment) ENUM qui notifie le changement. il ressemble actuellement à ceci:
public class NotifyingEnum<T> : INotifyPropertyChanged
where T : struct
{
private T value;
public event PropertyChangedEventHandler PropertyChanged;
public NotifyingEnum()
{
if (!typeof (T).IsEnum)
throw new ArgumentException("Type T must be an Enum");
}
public T Value
{
get { return value; }
set
{
if (!Enum.IsDefined(typeof (T), value))
throw new ArgumentOutOfRangeException("value", value, "Value not defined in enum, " + typeof (T).Name);
if (!this.value.Equals(value))
{
this.value = value;
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs("Value"));
}
}
}
}
Depuis un ENUM peut être attribué à une valeur vraiment, je veux vérifier si la valeur donnée est définie. Mais j'ai trouvé un problème. Si je lui donne ici une énumération constituée par exemple de Csv | Excel
, alors Enum.IsDefined
renverra false
. Apparemment parce que je n'ai défini aucune énumération composée de ces deux-là. Je suppose que sur un certain niveau est logique, mais comment puis-je vérifier si la valeur donnée est valide? En d'autres termes, pour le faire fonctionner, de quoi ai-je besoin pour échanger cette ligne suivante?
if (!Enum.IsDefined(typeof (T), value))
Voir mon extension de Enum.IsDefined ci-dessous. –