程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WF 4.0基礎篇(十) Collection集合操作

WF 4.0基礎篇(十) Collection集合操作

編輯:關於.NET

本節主要介紹 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.結果

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved