本節主要介紹 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例:基本使用
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>
例:基本使用
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
例:基本使用
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>例:基本使用
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.結果