Utilisation de l'activité Switch avec des types personnalisés
Cette rubrique s'applique à Windows Workflow Foundation 4.
Cet exemple montre comment permettre à une activité Switch d'évaluer un type complexe défini par l'utilisateur au moment de l'exécution. Dans la plupart des langages de programmation procéduraux traditionnels, une instruction switch sélectionne une logique d'exécution basée sur l'évaluation conditionnelle d'une variable. D'ordinaire, une instruction switch opère sur une expression qui peut être évaluée statiquement. Par exemple, en C#, cela signifie que seuls des types primitifs, tels que Boolean, Int32, String, et des types énumération sont pris en charge.
Pour permettre la commutation sur une classe personnalisée, la logique doit être implémentée pour évaluer les valeurs du type complexe personnalisé au moment de l'exécution. Cet exemple montre comment permettre la commutation sur un type complexe personnalisé nommé Person
.
Dans la classe personnalisée
Person
, un attribut TypeConverter est déclaré avec le nom du TypeConverter personnalisé.[TypeConverter(typeof(PersonConverter))] public class Person { public string Name { get; set; } public int Age { get; set; } ...
Dans la classe personnalisée
Person
, les classes GetHashCode et Equals sont remplacées.public override bool Equals(object obj) { Person person = obj as Person; if (person != null) { return string.Equals(this.Name, person.Name); } return false; } public override int GetHashCode() { if (this.Name != null) { return this.Name.GetHashCode(); } return 0; }
Une classe TypeConverter personnalisée qui effectue la conversion d'une instance de la classe personnalisée en chaîne et d'une chaîne en instance d'une classe personnalisée est implémentée.
public class PersonConverter : TypeConverter { public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { return (sourceType is string); } // Overrides the ConvertFrom method of TypeConverter. public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { if (value == null) { return null; } if (value is string) { return new Person { Name = (string)value }; } return base.ConvertFrom(context, culture, value); } // Overrides the ConvertTo method of TypeConverter. public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (destinationType == typeof(string)) { if (value != null) { return ((Person) value).Name; } else { return null; } } return base.ConvertTo(context, culture, value, destinationType); } }
Les fichiers suivants sont inclus dans cet exemple :
Person.cs : définit la classe
Person
.PersonConverter.cs : convertisseur de type pour la classe
Person
.Sequence.xaml : workflow qui bascule vers le type
Person
.Program.cs : fonction principale qui exécute le workflow.
Pour utiliser cet exemple
Chargez Switch.sln dans Visual Studio 2010.
Appuyez sur F6 pour générer la solution.
Appuyez sur CTRL+F5 pour exécuter l'exemple.
Remarque : |
---|
Les exemples peuvent déjà être installés sur votre ordinateur. Recherchez le répertoire (par défaut) suivant avant de continuer.
<LecteurInstall>:\WF_WCF_Samples
Si ce répertoire n'existe pas, rendez-vous sur la page (éventuellement en anglais) des exemples Windows Communication Foundation (WCF) et Windows Workflow Foundation (WF) pour .NET Framework 4 pour télécharger tous les exemples Windows Communication Foundation (WCF) et WF. Cet exemple se trouve dans le répertoire suivant.
<LecteurInstall>:\WF_WCF_Samples\WF\Basic\Built-InActivities\Switch
|