WF 中的集合活動
集合活動可用來處理工作流程中的集合物件。 .NET Framework 4.6.1 含有系統提供的活動,可用於加入與移除集合中的物件、測試集合中項目的存在,以及清除集合。 ExistsInCollection
和 RemoveFromCollection
包含型別為 Boolean 的 OutArgument<T>,這會表示結果。
重要
如果集合活動在設定基礎集合物件之前執行,便會擲回 InvalidOperationException 與活動錯誤。
集合活動
活動類型 | 描述 |
---|---|
AddToCollection<T> | 將項目加入指定集合。 |
ClearCollection<T> | 清除指定集合中的所有項目。 |
ExistsInCollection<T> | 如果項目存在於集合中,則傳回 true 。 |
RemoveFromCollection<T> | 移除指定集合中的項目,若順利移除該項目,則傳回 true 。 |
使用集合活動
下列程式碼範例示範如何與宣告為工作流程變數的集合互動。 所使用的集合是名為 List<T> 之 String 物件的 fruitList
。
Variable<ICollection<string>> fruitList = new Variable<ICollection<string>>
{
Default = new VisualBasicValue<ICollection<string>>("New List(Of String) From {\"Apple\", \"Orange\"}"),
Name = "FruitList"
};
Variable<bool> result = new Variable<bool>
{
Name = "Result"
};
Activity wf = new Sequence
{
Variables = { fruitList, result },
Activities =
{
new If
{
Condition = new ExistsInCollection<string>
{
Collection = fruitList,
Item = "Pear"
},
Then = new AddToCollection<string>
{
Collection = fruitList,
Item = "Pear"
},
Else = new RemoveFromCollection<string>
{
Collection = fruitList,
Item = "Apple"
}
},
new RemoveFromCollection<string>
{
Collection = fruitList,
Item = "Apple",
Result = result
},
new If
{
Condition = result,
Then = new ClearCollection<string>
{
Collection = fruitList,
}
}
}
};
<Sequence
xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities"
xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Sequence.Variables>
<x:Reference>__ReferenceID0</x:Reference>
<x:Reference>__ReferenceID1</x:Reference>
</Sequence.Variables>
<If>
<If.Condition>
<InArgument
x:TypeArguments="x:Boolean">
<ExistsInCollection
x:TypeArguments="x:String"
Item="Pear">
<ExistsInCollection.Result>
<OutArgument
x:TypeArguments="x:Boolean" />
</ExistsInCollection.Result>
<InArgument
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue.Result>
<OutArgument
x:TypeArguments="scg:ICollection(x:String)" />
</VariableValue.Result>
<VariableValue.Variable>
<Variable
x:TypeArguments="scg:ICollection(x:String)"
x:Name="__ReferenceID0"
Default="[New List(Of String) From {"Apple", "Orange"}]"
Name="FruitList" />
</VariableValue.Variable>
</VariableValue>
</InArgument>
</ExistsInCollection>
</InArgument>
</If.Condition>
<If.Then>
<AddToCollection
x:TypeArguments="x:String"
Item="Pear">
<InArgument
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue
x:TypeArguments="scg:ICollection(x:String)"
Variable="{x:Reference __ReferenceID0}">
<VariableValue.Result>
<OutArgument
x:TypeArguments="scg:ICollection(x:String)" />
</VariableValue.Result>
</VariableValue>
</InArgument>
</AddToCollection>
</If.Then>
<If.Else>
<RemoveFromCollection
x:TypeArguments="x:String"
Item="Apple"
Result="{x:Null}">
<InArgument
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue
x:TypeArguments="scg:ICollection(x:String)"
Variable="{x:Reference __ReferenceID0}">
<VariableValue.Result>
<OutArgument
x:TypeArguments="scg:ICollection(x:String)" />
</VariableValue.Result>
</VariableValue>
</InArgument>
</RemoveFromCollection>
</If.Else>
</If>
<RemoveFromCollection
x:TypeArguments="x:String"
Item="Apple">
<RemoveFromCollection.Result>
<OutArgument
x:TypeArguments="x:Boolean">
<VariableReference
x:TypeArguments="x:Boolean">
<VariableReference.Result>
<OutArgument
x:TypeArguments="Location(x:Boolean)" />
</VariableReference.Result>
<VariableReference.Variable>
<Variable
x:TypeArguments="x:Boolean"
x:Name="__ReferenceID1"
Name="Result" />
</VariableReference.Variable>
</VariableReference>
</OutArgument>
</RemoveFromCollection.Result>
<InArgument
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue
x:TypeArguments="scg:ICollection(x:String)"
Variable="{x:Reference __ReferenceID0}">
<VariableValue.Result>
<OutArgument
x:TypeArguments="scg:ICollection(x:String)" />
</VariableValue.Result>
</VariableValue>
</InArgument>
</RemoveFromCollection>
<If>
<If.Condition>
<InArgument
x:TypeArguments="x:Boolean">
<VariableValue
x:TypeArguments="x:Boolean"
Variable="{x:Reference __ReferenceID1}">
<VariableValue.Result>
<OutArgument
x:TypeArguments="x:Boolean" />
</VariableValue.Result>
</VariableValue>
</InArgument>
</If.Condition>
<If.Then>
<ClearCollection
x:TypeArguments="x:String">
<InArgument
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue
x:TypeArguments="scg:ICollection(x:String)"
Variable="{x:Reference __ReferenceID0}">
<VariableValue.Result>
<OutArgument
x:TypeArguments="scg:ICollection(x:String)" />
</VariableValue.Result>
</VariableValue>
</InArgument>
</ClearCollection>
</If.Then>
</If>
</Sequence>
您也可以使用 CSharpValue<TResult> 代替 VisualBasicValue<TResult> 來建立上述程式碼範例。
Variable<ICollection<string>> fruitList = new Variable<ICollection<string>>
{
Default = new CSharpValue<ICollection<string>>("new List<String> From {\"Apple\", \"Orange\"};"),
Name = "FruitList"
};
Variable<bool> result = new Variable<bool>
{
Name = "Result"
};
Activity wf = new Sequence
{
Variables = { fruitList, result },
Activities =
{
new If
{
Condition = new ExistsInCollection<string>
{
Collection = fruitList,
Item = "Pear"
},
Then = new AddToCollection<string>
{
Collection = fruitList,
Item = "Pear"
},
Else = new RemoveFromCollection<string>
{
Collection = fruitList,
Item = "Apple"
}
},
new RemoveFromCollection<string>
{
Collection = fruitList,
Item = "Apple",
Result = result
},
new If
{
Condition = result,
Then = new ClearCollection<string>
{
Collection = fruitList,
}
}
}
};
<Sequence
xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities"
xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Sequence.Variables>
<x:Reference>__ReferenceID0</x:Reference>
<x:Reference>__ReferenceID1</x:Reference>
</Sequence.Variables>
<If>
<If.Condition>
<InArgument
x:TypeArguments="x:Boolean">
<ExistsInCollection
x:TypeArguments="x:String"
Item="Pear">
<ExistsInCollection.Result>
<OutArgument
x:TypeArguments="x:Boolean" />
</ExistsInCollection.Result>
<InArgument
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue.Result>
<OutArgument
x:TypeArguments="scg:ICollection(x:String)" />
</VariableValue.Result>
<VariableValue.Variable>
<Variable
x:TypeArguments="scg:ICollection(x:String)"
x:Name="__ReferenceID0"
Default="[new List<String> From {"Apple", "Orange"};]"
Name="FruitList" />
</VariableValue.Variable>
</VariableValue>
</InArgument>
</ExistsInCollection>
</InArgument>
</If.Condition>
<If.Then>
<AddToCollection
x:TypeArguments="x:String"
Item="Pear">
<InArgument
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue
x:TypeArguments="scg:ICollection(x:String)"
Variable="{x:Reference __ReferenceID0}">
<VariableValue.Result>
<OutArgument
x:TypeArguments="scg:ICollection(x:String)" />
</VariableValue.Result>
</VariableValue>
</InArgument>
</AddToCollection>
</If.Then>
<If.Else>
<RemoveFromCollection
x:TypeArguments="x:String"
Item="Apple"
Result="{x:Null}">
<InArgument
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue
x:TypeArguments="scg:ICollection(x:String)"
Variable="{x:Reference __ReferenceID0}">
<VariableValue.Result>
<OutArgument
x:TypeArguments="scg:ICollection(x:String)" />
</VariableValue.Result>
</VariableValue>
</InArgument>
</RemoveFromCollection>
</If.Else>
</If>
<RemoveFromCollection
x:TypeArguments="x:String"
Item="Apple">
<RemoveFromCollection.Result>
<OutArgument
x:TypeArguments="x:Boolean">
<VariableReference
x:TypeArguments="x:Boolean">
<VariableReference.Result>
<OutArgument
x:TypeArguments="Location(x:Boolean)" />
</VariableReference.Result>
<VariableReference.Variable>
<Variable
x:TypeArguments="x:Boolean"
x:Name="__ReferenceID1"
Name="Result" />
</VariableReference.Variable>
</VariableReference>
</OutArgument>
</RemoveFromCollection.Result>
<InArgument
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue
x:TypeArguments="scg:ICollection(x:String)"
Variable="{x:Reference __ReferenceID0}">
<VariableValue.Result>
<OutArgument
x:TypeArguments="scg:ICollection(x:String)" />
</VariableValue.Result>
</VariableValue>
</InArgument>
</RemoveFromCollection>
<If>
<If.Condition>
<InArgument
x:TypeArguments="x:Boolean">
<VariableValue
x:TypeArguments="x:Boolean"
Variable="{x:Reference __ReferenceID1}">
<VariableValue.Result>
<OutArgument
x:TypeArguments="x:Boolean" />
</VariableValue.Result>
</VariableValue>
</InArgument>
</If.Condition>
<If.Then>
<ClearCollection
x:TypeArguments="x:String">
<InArgument
x:TypeArguments="scg:ICollection(x:String)">
<VariableValue
x:TypeArguments="scg:ICollection(x:String)"
Variable="{x:Reference __ReferenceID0}">
<VariableValue.Result>
<OutArgument
x:TypeArguments="scg:ICollection(x:String)" />
</VariableValue.Result>
</VariableValue>
</InArgument>
</ClearCollection>
</If.Then>
</If>
</Sequence>