Verwenden der switch-Aktivität mit benutzerdefinierten Typen
Dieses Thema gilt für Windows Workflow Foundation 4.
Dieses Beispiel zeigt, wie eine Switch-Aktivität aktiviert wird, um zur Laufzeit einen benutzerdefinierten komplexen Typ auszuwerten. In den meisten herkömmlichen prozeduralen Programmiersprachen wird mit einer switch-Anweisung auf Grundlage der bedingten Auswertung einer Variable eine Ausführungslogik ausgewählt. Normalerweise wird eine switch-Anweisung auf einen Ausdruck angewendet, der statisch ausgewertet werden kann. In C# bedeutet dies z. B., dass nur primitive Typen wie Boolean, Int32 oder String und Enumerationstypen unterstützt werden.
Um die switch-Funktion für eine benutzerdefinierte Klasse zu aktivieren, muss Logik zur Auswertung des komplexen benutzerdefinierten Typs zur Laufzeit implementiert werden. In diesem Beispiel wird veranschaulicht, wie die switch-Funktion für einen benutzerdefinierten komplexen Typ mit dem Namen Person
aktiviert wird.
In der benutzerdefinierten Klasse
Person
wird ein TypeConverter-Attribut mit dem Namen des benutzerdefinierten TypeConverter deklariert.[TypeConverter(typeof(PersonConverter))] public class Person { public string Name { get; set; } public int Age { get; set; } ...
In der benutzerdefinierten Klasse
Person
werden die Equals-Klasse und die GetHashCode-Klasse überschrieben.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; }
Eine benutzerdefinierte TypeConverter-Klasse wird implementiert. Diese führt die Konvertierung einer Instanz der benutzerdefinierten Klasse in eine Zeichenfolge sowie die Konvertierung einer Zeichenfolge in eine Instanz der benutzerdefinierten Klasse aus.
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); } }
Die folgenden Dateien sind in diesem Projekt enthalten:
Person.cs: Definiert die
Person
-Klasse.PersonConverter.cs: Der Typkonverter für die
Person
-Klasse.Sequence.xaml: Ein Workflow, der den
Person
-Typ umschaltet.Program.cs: Die Hauptfunktion, die den Workflow ausführt.
So verwenden Sie dieses Beispiel
Laden Sie "Switch.sln" in Visual Studio 2010.
Drücken Sie F6, um die Projektmappe zu erstellen.
Drücken Sie STRG+F5, um das Beispiel auszuführen.
Hinweis: |
---|
Die Beispiele sind möglicherweise bereits auf dem Computer installiert. Überprüfen Sie das folgende (standardmäßige) Verzeichnis, bevor Sie fortfahren.
<Installationslaufwerk>:\WF_WCF_Samples
Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)- und WF-Beispiele herunterzuladen. Dieses Beispiel befindet sich im folgenden Verzeichnis.
<Installationslaufwerk>:\WF_WCF_Samples\WF\Basic\Built-InActivities\Switch
|