Utilizzo dell'attività Switch con tipi personalizzatiUsage of the Switch Activity with Custom Types

In questo esempio viene descritto come consentire a un'attività Switch<T> di valutare un tipo complesso definito dall'utente in fase di esecuzione.This sample describes how to enable a Switch<T> activity to evaluate a user-defined complex type at runtime. Nei linguaggi di programmazione procedurali più tradizionali, un passare istruzione seleziona una logica di esecuzione in base alla valutazione condizionale di una variabile.In most traditional procedural programming languages, a switch statement selects an execution logic based on the conditional evaluation of a variable. Tradizionalmente, un'istruzione switch agisce su un'espressione che può essere valutata staticamente.Traditionally, a switch statement operates on an expression that can be statically evaluated. Ad esempio, in C# ciò significa che sono supportati solo tipi primitivi, quali Boolean, Int32, String, e tipi di enumerazione.For example, in C# this means that only primitive types, such as Boolean, Int32, String, and enumeration types are supported.

Per abilitare il passaggio in una classe personalizzata, è necessario implementare la logica per valutare valori di tipo complesso personalizzato in fase di esecuzione.To enable switching on a custom class, logic must be implemented to evaluate values of the custom complex type at runtime. In questo esempio viene illustrato come abilitare il passaggio su un tipo complesso personalizzato denominato Person.This sample demonstrates how to enable switching on a custom complex type named Person.

  • Nella classe personalizzata Person un attributo TypeConverter viene dichiarato con il nome dell'oggetto TypeConverter personalizzato.In the custom class Person, a TypeConverter attribute is declared with the name of the custom TypeConverter.

    [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.In the custom class Person, the Equals and GetHashCode classes are overridden.

    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.A custom TypeConverter class is implemented that performs the conversion of an instance of the custom class to a string and a string to an instance of a custom class.

    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:The following files are included in this sample:

  • Person.cs: definisce la Person classe.Person.cs: Defines the Person class.

  • PersonConverter.cs: il convertitore di tipi per il Person classe.PersonConverter.cs: The type converter for the Person class.

  • Sequence: un flusso di lavoro che passa il Person tipo.Sequence.xaml: a workflow that switches over the Person type.

  • Program.cs: la funzione principale che esegue il flusso di lavoro.Program.cs: The main function that runs the workflow.

Per usare questo esempioTo use this sample

  1. Caricare Switch.sln in Visual Studio 2010Visual Studio 2010.Load Switch.sln in Visual Studio 2010Visual Studio 2010.

  2. Per compilare la soluzione, premere CTRL+MAIUSC+B.Press CTRL+SHIFT+B to build the solution.

  3. Premere CTRL + F5 per eseguire l'esempio.Press CTRL + F5 to run the sample.

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your machine. Verificare la directory seguente (impostazione predefinita) prima di continuare.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Se questa directory non esiste, andare al Windows Communication Foundation (WCF) e gli esempi di Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti i Windows Communication Foundation (WCF) e WFWF esempi.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Questo esempio si trova nella directory seguente.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WF\Basic\Built-InActivities\Switch

Vedere ancheSee Also

Libreria di attività incorporataBuilt-In Activity Library