zoukankan      html  css  js  c++  java
  • WF4.0 基础篇 (十) Collection 集合操作

     

    本节主要介绍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.结果

     

  • 相关阅读:
    组装query,query汇总,query字段
    POJ 1276, Cash Machine
    POJ 1129, Channel Allocation
    POJ 2531, Network Saboteur
    POJ 1837, Balance
    POJ 3278, Catch That Cow
    POJ 2676, Sudoku
    POJ 3126, Prime Path
    POJ 3414, Pots
    POJ 1426, Find The Multiple
  • 原文地址:https://www.cnblogs.com/foundation/p/1626611.html
Copyright © 2011-2022 走看看