带自定义类型的切换活动的用法
本主题适用于 Windows Workflow Foundation 4。
此示例介绍如何使 Switch 活动能够在运行时计算用户定义的复杂类型。在大多数传统的过程性编程语言中,switch 语句会根据变量的条件评估来选择执行逻辑。传统上,switch 语句会操作可静态计算的表达式。例如,在 C# 中,这表示仅支持基元类型(如 Boolean、Int32、String)和枚举类型。
若要启用针对自定义类的切换,则必须实现逻辑以在运行时计算自定义复杂类型的值。此示例演示如何启用针对名为 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.cs:
Person
类的类型转换器。Sequence.xaml:基于
Person
类型进行切换的工作流。Program.cs:运行工作流的主函数。
使用此示例
在 Visual Studio 2010 中加载 Switch.sln。
按 F6 生成解决方案。
按 Ctrl+F5 运行示例。
注意: |
---|
您的计算机上可能已安装这些示例。在继续操作之前,请先检查以下(默认)目录:
<安装驱动器>:\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
|