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

     

  • 相关阅读:
    关于深浅克隆
    忙话codesmith
    SynchronizedDictionary线程安全的泛型版本
    自制定长的Queue
    白忙活
    发现一个不错的技术社区(水木清华)
    自已实现线程池
    Berkeley DB .net 进行添加和更新操作
    关于ThreadPool.RegisterWaitForSingleObject和WaitHandle的应用介绍
    1100内产生3个不重复的随机数
  • 原文地址:https://www.cnblogs.com/foundation/p/1626611.html
Copyright © 2020-2023  润新知