带自定义类型的切换活动的用法

本主题适用于 Windows Workflow Foundation 4。

此示例介绍如何使 Switch 活动能够在运行时计算用户定义的复杂类型。在大多数传统的过程性编程语言中,switch 语句会根据变量的条件评估来选择执行逻辑。传统上,switch 语句会操作可静态计算的表达式。例如,在 C# 中,这表示仅支持基元类型(如 BooleanInt32String)和枚举类型。

若要启用针对自定义类的切换,则必须实现逻辑以在运行时计算自定义复杂类型的值。此示例演示如何启用针对名为 Person 的自定义复杂类型的切换。

  • 在自定义类 Person 中,使用自定义 TypeConverter 的名称声明 TypeConverter 特性。

    [TypeConverter(typeof(PersonConverter))]
    public class Person
    {
       public string Name { get; set; }
       public int Age { get; set; }
    ...
    
  • 在自定义类 Person 中,重写 Equals 和 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;
    }
    
  • 实现自定义 TypeConverter 类,这将执行自定义类的实例与字符串之间的相互转换。

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

此示例中包括以下文件:

  • Person.cs:定义 Person 类。

  • PersonConverter.csPerson 类的类型转换器。

  • Sequence.xaml:基于 Person 类型进行切换的工作流。

  • Program.cs:运行工作流的主函数。

使用此示例

  1. 在 Visual Studio 2010 中加载 Switch.sln。

  2. 按 F6 生成解决方案。

  3. 按 Ctrl+F5 运行示例。

Ee624141.Important(zh-cn,VS.100).gif 注意:
您的计算机上可能已安装这些示例。在继续操作之前,请先检查以下(默认)目录:

<安装驱动器>:\WF_WCF_Samples

如果此目录不存在,请访问针对 .NET Framework 4 的 Windows Communication Foundation (WCF) 和 Windows Workflow Foundation (WF) 示例(可能为英文网页),下载所有 Windows Communication Foundation (WCF) 和 WF 示例。此示例位于以下目录:

<安装驱动器>:\WF_WCF_Samples\WF\Basic\Built-InActivities\Switch

另请参见

概念

.NET Framework 4 内置活动库