Freigeben über


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

  1. Laden Sie "Switch.sln" in Visual Studio 2010.

  2. Drücken Sie F6, um die Projektmappe zu erstellen.

  3. Drücken Sie STRG+F5, um das Beispiel auszuführen.

Ee624141.Important(de-de,VS.100).gif 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

Siehe auch

Konzepte

Integrierte .NET Framework 4-Aktivitätsbibliothek