现在的位置: 首页 > 综合 > 正文

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

2014年04月05日 ⁄ 综合 ⁄ 共 7044字 ⁄ 字号 评论关闭

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

 

本文例子下载:

http://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.结果


抱歉!评论已关闭.