WF4.0 基础篇 (十) Collection 集合操作

本节主要介绍AddtoCollection<T>,RemoveFromCollection<T>,ClearCollection<T>,ExistsInCollection<T> 的使用.

 

本文例子下载:

http://files.cnblogs.com/foundation/CollectionSample.rar

本文例子说明

image.png

 


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]指定

 

image.png

 

image.png

例:基本使用

1.在工作流中定义一个List<string>型变量[myCollection]

2.在工作流中添加一个[AddtoCollection<T>],用于向变量[myCollection]中添加一个字符串项"wxd"

在工作流中再添加一个[AddtoCollection<T>],用于向变量[myCollection]中添加一个字符串项"lzm"

在工作流中再添加一个[AddtoCollection<T>],用于向变量[myCollection]中添加一个字符串项"wxwinter"

3.在工作流中添加一个[Foreach],用于枚举变量[myCollection],并用[WriteLine]打印枚举值

 

流程

image.png

宿主

 

WorkflowInvoker.Invoke(new AddItemToCollectionWorkflow());

结果

image.png

 

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]指定

image.png

 

image.png

 

例:基本使用

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 { getset; }

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

}

}

流程

image.png

宿主

 

WorkflowInvoker.Invoke(new RemoveItemFromCollectionWorkflow());

结果

image.png

 

ClearCollection<T> 清除集合中所有项

类名

System.Activities.Statements.ClearCollection<T>

文件

System.Activities.dll

结构说明

继承 CodeActivity

是一个 sealed类

override 了 [CacheMetadata方法] 与 [Execute方法]

[Collection]属性,类型为 InArgument<ICollection<T>>

功能说明

[ClearCollection<T>]可以将一个项从[Collection]集合中移出

在使用[ClearCollection<T>]时,要先指定要操作集合的类型

image.png

 

image.png

 

例:基本使用

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 { getset; }

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

}

}

流程

image.png

宿主

 

WorkflowInvoker.Invoke(new ClearAllFromCollectionWorkflow());

结果

image.png

 

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]指定

image.png

image.png

 

 

 

例:基本使用

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 { getset; }

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

}

}

流程

image.png

宿主

 

WorkflowInvoker.Invoke(new ExistsItemInCollection());

结果

image.png

 

复杂对象集合的操作

使用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

setget; }

}

 

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.结果

image.png

 

 

键值对集合操作

建议使用SortedList<K,V> 集合

System.Collections.Generic.SortedList<K,V>

键值对集合,如果的重复的key,会报错

System.Collections.Generic.SortedList<stringstring> mySortedList = new System.Collections.Generic.SortedList<stringstring>();

 

mySortedList.Add("b""wxd");

 

foreach (System.Collections.Generic.KeyValuePair<stringstring> v in mySortedList)

{

 

}

 

System.Collections.Generic.KeyValuePair<stringstring> item = new System.Collections.Generic.KeyValuePair<stringstring>("a""wxwinter");

 

 

例子

1.流程

t3.png

 

 

3.宿主

 

WorkflowInvoker.Invoke(new KeyValueCollectionWorkflow());

 

 

4.结果

image.png

 

转载自:

https://www.cnblogs.com/foundation/archive/2009/12/17/1626611.html


#转载请注明出处 www.skcircle.com 《少有人走的路》勇哥的工业自动化技术网站。如果需要本贴图片源码等资源,请向勇哥索取。
扫码加本站公众号

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«   2021年2月   »
1234567
891011121314
15161718192021
22232425262728
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:

Powered By Z-BlogPHP 1.6.0 Valyria

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864