本节主要介绍AddtoCollection<T>,RemoveFromCollection<T>,ClearCollection<T>,ExistsInCollection<T> 的使用.
本文例子下载:
https://files.cnblogs.com/foundation/CollectionSample.rar
本文例子说明
Collection 集合操作
AddtoCollection<T> 添加项到集合
类名 | System.Activities.Statements.AddtoCollection<T> |
文件 | System.Activities.dll |
结构说明 | 继承 CodeActivity 是一个 sealed类 override 了 [CacheMetadata方法] 与 [Execute方法] [Item]属性,类型为 [InArgument<T>] (类图中的this) [Collection]属性,类型为 InArgument<ICollection<T>> |
功能说明 | [AddtoCollection]可以将一个项添加到[Collection]集合中 [Item]属性用于指定要添加到集合中的项 在使用[AddtoCollection]时,要先指定集合项的类型,通过[TypeArgument]指定
|
例:基本使用
1.在工作流中定义一个List<string>型变量[myCollection]
2.在工作流中添加一个[AddtoCollection<T>],用于向变量[myCollection]中添加一个字符串项"wxd"
在工作流中再添加一个[AddtoCollection<T>],用于向变量[myCollection]中添加一个字符串项"lzm"
在工作流中再添加一个[AddtoCollection<T>],用于向变量[myCollection]中添加一个字符串项"wxwinter"
3.在工作流中添加一个[Foreach],用于枚举变量[myCollection],并用[WriteLine]打印枚举值
流程 | |
宿主 |
WorkflowInvoker.Invoke(new AddItemToCollectionWorkflow()); |
结果 |
RemoveFromCollection<T> 从集合中移出项
类名 | System.Activities.Statements.AddtoCollection<T> |
文件 | System.Activities.dll |
结构说明 | 继承 CodeActivity<TResult> 是一个 sealed类 override 了 [CacheMetadata方法] 与 [Execute方法] [Item]属性,类型为 [InArgument<T>] (类图中的this) [Collection]属性,类型为 InArgument<ICollection<T>> Activity返回值为[bool],用[Result]来接 |
功能说明 | [RemoveFromCollection]可以将一个项从[Collection]集合中移出 [Item]属性用于指定要从集合移出的项 [Result]属性表示操作结果,如果操作成功返回[True],如果操作不成功,返回[False] 如果集合中的两个相同的项,只移除第一个 在使用[RemoveFromCollection]时,要先指定集合项的类型,通过[TypeArgument]指定 |
例:基本使用
1. 创建一code activity 名为[CollectionActivity],
具有[Out]参数,类型为List<string>的参数[myOutCollection]
2. 在流程中添加List<string>变量[myCollection]
3. 在流程中添加[CollectionActivity],将[CollectionActivity.myOutCollection]参数绑定到 [myCollection] 变量
4.在流程中添加bool变量[myResult],用于接收[RemoveFromCollection<T>]操作的返回值
5.在工作流中添加一个[RemoveFromCollection<T>],用于从变量[myCollection]中移除一个字符串项"wxd"
在工作流中添加一个WriteLine]打印变量[myResult]的值
6.在工作流中再添加一个[RemoveFromCollection<T>],用于从变量[myCollection]中移除一个字符串项"wxd"
在工作流中再添加一个WriteLine]打印变量[myResult]的值
7.在工作流中添加一个[Foreach],用于枚举变量[myCollection],并用[WriteLine]打印枚举值
CollectionActivity | public sealed class CollectionActivity : CodeActivity { public OutArgument<System.Collections.Generic.List<string>> myOutCollection { get; set; } protected override void Execute(CodeActivityContext context) { System.Collections.Generic.List<string> list = new List<string>(); list.Add("wxd"); list.Add("lzm"); list.Add("wxwinter");
context.SetValue(this.myOutCollection, list); } } |
流程 | |
宿主 |
WorkflowInvoker.Invoke(new RemoveItemFromCollectionWorkflow()); |
结果 |
ClearCollection<T> 清除集合中所有项
类名 | System.Activities.Statements.ClearCollection<T> |
文件 | System.Activities.dll |
结构说明 | 继承 CodeActivity 是一个 sealed类 override 了 [CacheMetadata方法] 与 [Execute方法] [Collection]属性,类型为 InArgument<ICollection<T>> |
功能说明 | [ClearCollection<T>]可以将一个项从[Collection]集合中移出 在使用[ClearCollection<T>]时,要先指定要操作集合的类型 |
例:基本使用
1. 创建一code activity 名为[CollectionActivity],
具有[Out]参数,类型为List<string>的参数[myOutCollection]
2. 在流程中添加List<string>变量[myCollection]
3. 在流程中添加[CollectionActivity],将[CollectionActivity.myOutCollection]参数绑定到 [myCollection] 变量
4.在工作流中添加一个[Foreach],用于枚举变量[myCollection],并用[WriteLine]打印枚举值
5.在工作流中添加一个[ClearCollection<T>],用于清除[myCollection]集合中所有项
6.在工作流中再添加一个[Foreach],用于枚举变量[myCollection],并用[WriteLine]打印枚举值
CollectionActivity | public sealed class CollectionActivity : CodeActivity { public OutArgument<System.Collections.Generic.List<string>> myOutCollection { get; set; } protected override void Execute(CodeActivityContext context) { System.Collections.Generic.List<string> list = new List<string>(); list.Add("wxd"); list.Add("lzm"); list.Add("wxwinter");
context.SetValue(this.myOutCollection, list); } } |
流程 | |
宿主 |
WorkflowInvoker.Invoke(new ClearAllFromCollectionWorkflow()); |
结果 |
ExistsInCollection<T> 查询集合中存在指定项
类名 | System.Activities.Statements.ExistsInCollection<T> |
文件 | System.Activities.dll |
结构说明 | 继承 CodeActivity<TResult> 是一个 sealed类 override 了 [CacheMetadata方法] 与 [Execute方法] [Item]属性,类型为 [InArgument<T>] (类图中的this) [Collection]属性,类型为 InArgument<ICollection<T>> Activity返回值为[bool],用[Result]来接 |
功能说明 | [ExistsInCollection]用于从[Collection]集合中查找指定项 [Item]属性,用于指定要从集合移出的项 [Result]属性表示查找结果,如果存在成功返回[True],如果不存在,返回[False] 在使用[ExistsInCollection<T> ]时,要先指定集合项的类型,通过[TypeArgument]指定 |
例:基本使用
1. 创建一code activity 名为[CollectionActivity],
具有[Out]参数,类型为List<string>的参数[myOutCollection]
2. 在流程中添加List<string>变量[myCollection]
3. 在流程中添加[CollectionActivity],将[CollectionActivity.myOutCollection]参数绑定到 [myCollection] 变量
4.在流程中添加bool变量[myResult],用于接收[ExistsInCollection<T>]操作的返回值
5.在工作流中添加一个[ExistsInCollection<T>],用于从变量[myCollection]中查找一个字符串项"wxd"
6.在工作流中添加一个WriteLine]打印变量[myResult]的值
CollectionActivity | public sealed class CollectionActivity : CodeActivity { public OutArgument<System.Collections.Generic.List<string>> myOutCollection { get; set; } protected override void Execute(CodeActivityContext context) { System.Collections.Generic.List<string> list = new List<string>(); list.Add("wxd"); list.Add("lzm"); list.Add("wxwinter");
context.SetValue(this.myOutCollection, list); } } |
流程 | |
宿主 |
WorkflowInvoker.Invoke(new ExistsItemInCollection()); |
结果 |
复杂对象集合的操作
使用SortedSet<T>集合的比效接口,用RemoveFromCollection<T> 从集合移出项
使用SortedSet<T>集合的比效接口,用AddtoCollection<T> 添加项到集合
使用SortedSet<T>集合的比效接口,忽略向集合添加的重复项
建议使用SortedSet<T>集合
System.Collections.Generic.SortedSet<T>
将忽略添加到集合中的重复项,如果是复杂对像,要实现SortedSet的接口
class Program { static void Main(string[] args) { System.Collections.Generic.SortedSet<myData> list = new System.Collections.Generic.SortedSet<myData>(new myDataComparer()); list.Add(new myData() { myValue = "wxd" }); list.Add(new myData() { myValue = "lzm" }); list.Add(new myData() { myValue = "wxd" }); foreach (var v in list) { System.Console.WriteLine(v.myValue); } System.Console.Read(); } } public class myData { public string myValue { set; get; } }
public class myDataComparer : System.Collections.Generic.IComparer<myData> { public int Compare(myData x, myData y) { if (x.myValue == y.myValue) { return 0; } else { return 1; } } } |
例子
1. 定义数据类,并实现比效接口
public class myData { public string myValue { set; get; } }
public class myDataComparer : System.Collections.Generic.IComparer<myData> { public int Compare(myData x, myData y) { if (x.myValue == y.myValue) { return 0; } else { return 1; } } } |
2.流程
3.宿主
WorkflowInvoker.Invoke(new ComplexCollectionWorlflow()); |
4.结果
键值对集合操作
建议使用SortedList<K,V> 集合
System.Collections.Generic.SortedList<K,V>
键值对集合,如果的重复的key,会报错
System.Collections.Generic.SortedList<string, string> mySortedList = new System.Collections.Generic.SortedList<string, string>();
mySortedList.Add("b", "wxd");
foreach (System.Collections.Generic.KeyValuePair<string, string> v in mySortedList) {
}
System.Collections.Generic.KeyValuePair<string, string> item = new System.Collections.Generic.KeyValuePair<string, string>("a", "wxwinter");
|
例子
1.流程
3.宿主
WorkflowInvoker.Invoke(new KeyValueCollectionWorkflow()); |
4.结果