Condividi tramite


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

  1. Caricare Switch.sln in Visual Studio 2010.

  2. Premere F6 per compilare la soluzione.

  3. Premere CTRL + F5 per eseguire l'esempio.

Ee624141.Important(it-it,VS.100).gif Nota:
È 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

Vedere anche

Concetti

Libreria attività incorporata di .NET Framework 4