Compartir a través de


Usar la actividad Switch con tipos personalizados

Este tema es aplicable a Windows Workflow Foundation 4.

En este ejemplo se describe cómo habilitar una actividad Switch para evaluar un tipo complejo definido por el usuario en tiempo de ejecución. En los lenguajes de programación orientados a procedimientos más tradicionales, una instrucción switch selecciona una lógica de ejecución basada en la evaluación condicional de una variable. Tradicionalmente, una instrucción switch funciona en una expresión que se puede evaluar estáticamente. Por ejemplo, en C# esto significa que solo se admiten los tipos primitivos, como Boolean, Int32, String, y los tipos de enumeración.

Para habilitar el cambio en una clase personalizada, se debe implementar lógica que evalúe los valores del tipo complejo personalizado en tiempo de ejecución. En este ejemplo se muestra cómo habilitar el cambio en un tipo complejo personalizado denominado Person.

  • En la clase Person personalizada, se declara un atributo TypeConverter con el nombre de la clase TypeConverter personalizada.

    [TypeConverter(typeof(PersonConverter))]
    public class Person
    {
       public string Name { get; set; }
       public int Age { get; set; }
    ...
    
  • En la clase Person personalizada, se invalidan los métodos Equals y 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;
    }
    
  • Se implementa una clase TypeConverter personalizada que realiza la conversión de una instancia de la clase personalizada a una cadena y una cadena a una instancia de una clase personalizada.

    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);
        }
    }
    

Este ejemplo incluye los siguientes archivos.

  • Person.cs: define la clase Person.

  • PersonConverter.cs: el convertidor de tipos de la clase Person.

  • Sequence.xaml: flujo de trabajo que cambia el tipo de Person.

  • Program.cs: la función principal que ejecuta el flujo de trabajo.

Para utilizar este ejemplo

  1. Cargue Switch.sln en Visual Studio 2010.

  2. Presione F6 para compilar la solución.

  3. Presione CTRL + F5 para ejecutar el ejemplo.

Ee624141.Important(es-es,VS.100).gif Nota:
Puede que los ejemplos ya estén instalados en su equipo. Compruebe el siguiente directorio (valor predeterminado) antes de continuar.

<unidadDeInstalación>:\WF_WCF_Samples

Si no existe este directorio, vaya a la página de ejemplos de Windows Communication Foundation (WCF) y Windows Workflow Foundation (WF) Samples para .NET Framework 4 para descargar todos los ejemplos de WF y Windows Communication Foundation (WCF). Este ejemplo se encuentra en el siguiente directorio.

<unidadDeInstalación>:\WF_WCF_Samples\WF\Basic\Built-InActivities\Switch

Vea también

Conceptos

Biblioteca de actividades integrada de .NET Framework 4