Utilizzo dell'attività Switch con tipi personalizzati
Le informazioni contenute in questo argomento sono valide per Windows Workflow Foundation 4.
In questo esempio viene descritto come consentire a un'attività Switch di valutare un tipo complesso definito dall'utente in fase di esecuzione. Nei linguaggi di programmazione procedurali più tradizionali, un'istruzione switch seleziona una logica di esecuzione in base alla valutazione condizionale di una variabile. Tradizionalmente, un'istruzione switch agisce su un'espressione che può essere valutata staticamente. Ad esempio, in C# ciò significa che sono supportati solo tipi primitivi, quali Boolean, Int32, String, e tipi di enumerazione.
Per abilitare il passaggio in una classe personalizzata, è necessario implementare la logica per valutare valori di tipo complesso personalizzato in fase di esecuzione. In questo esempio viene illustrato come abilitare il passaggio su un tipo complesso personalizzato denominato Person
.
Nella classe personalizzata
Person
un attributo TypeConverter viene dichiarato con il nome dell'oggetto TypeConverter personalizzato.[TypeConverter(typeof(PersonConverter))] public class Person { public string Name { get; set; } public int Age { get; set; } ...
Nella classe personalizzata
Person
viene eseguito l'override delle classi Equals e GetHashCode.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; }
Viene implementata una classe personalizzata TypeConverter che esegue la conversione di un'istanza della classe personalizzata in una stringa e una stringa in un'istanza di una classe personalizzata.
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); } }
In questo esempio sono inclusi i file seguenti:
Person.cs: definisce la classe
Person
.PersonConverter.cs: il convertitore di tipi per la classe
Person
.Sequence.xaml: un flusso di lavoro che passa al tipo
Person
.Program.cs: la funzione principale che esegue il flusso di lavoro.
Per utilizzare questo esempio
Caricare Switch.sln in Visual Studio 2010.
Premere F6 per compilare la soluzione.
Premere CTRL + F5 per eseguire l'esempio.
![]() |
---|
È possibile che gli esempi siano già installati nel computer. Verificare la directory seguente (impostazione predefinita) prima di continuare.
<UnitàInstallazione>:\WF_WCF_Samples
Se questa directory non esiste, visitare la pagina relativa agli esempi di Windows Communication Foundation (WCF) e Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti gli esempi di Windows Communication Foundation (WCF) e WF. Questo esempio si trova nella directory seguente.
<UnitàInstallazione>:\WF_WCF_Samples\WF\Basic\Built-InActivities\Switch
|