Condividi tramite


Attività di raccolta in WF

Le informazioni contenute in questo argomento sono valide per Windows Workflow Foundation 4.

Le attività di raccolta vengono utilizzate per operare con gli oggetti Collection in un flusso di lavoro. .NET Framework versione 4 dispone di attività fornite dal sistema per l'aggiunta e la rimozione di elementi da una raccolta, la verifica dell'esistenza di un elemento in una raccolta e la cancellazione di una raccolta. Tutte le attività di raccolta sono classi generiche che ereditano dall'oggetto CodeActivity o dall'oggetto CodeActivity; gli oggetti ExistsInCollection e RemoveFromCollection dispongono di un oggetto OutArgument di tipo Boolean che indica il risultato.

Ee358729.Important(it-it,VS.100).gif Nota:
Se un'attività di raccolta viene eseguita prima di impostare l'oggetto Collection sottostante, viene generata un'eccezione InvalidOperationException e l'attività non riesce.

Attività di raccolta

AddToCollection

Aggiunge un elemento in una raccolta specificata.

ClearCollection

Cancella tutti gli elementi da una raccolta specificata.

ExistsInCollection

Restituisce true se un elemento esiste in una raccolta.

RemoveFromCollection

Rimuove un elemento da una raccolta specificata e restituisce true se l'elemento è stato rimosso correttamente.

Utilizzo delle attività di raccolta

Nell'esempio di codice seguente viene illustrato come interagire con una raccolta dichiarata come variabile del flusso di lavoro. La raccolta utilizzata è un oggetto List’1 di oggetti String denominati fruitList.

Variable<ICollection<string>> fruitList = new Variable<ICollection<string>>
{
Default = new List<string>
      {
          "Apple",
          "Orange",
      },
      Name = "FruitList",
};

Variable<bool> result = new Variable<bool>
{
      Name = "Result",
}

Sequence seq1 = 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="https://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml">
  <Sequence.Variables>
    <Variable x:TypeArguments="scg:ICollection(x:String)" Name="FruitList">
      <Variable.Default>
        <Literal x:TypeArguments="scg:ICollection(x:String)" Result="{x:Null}">
          <scg:List x:TypeArguments="x:String" Capacity="4">
            <x:String>Orange</x:String>
          </scg:List>
        </Literal>
      </Variable.Default>
    </Variable>
    <Variable x:TypeArguments="x:Boolean" Name="Result" />
  </Sequence.Variables>
  <If>
    <If.Condition>
      <InArgument x:TypeArguments="x:Boolean">
        <ExistsInCollection x:TypeArguments="x:String" Item="Pear" Result="{x:Null}">[FruitList]</ExistsInCollection>
      </InArgument>
    </If.Condition>
    <If.Else>
     <RemoveFromCollection x:TypeArguments="x:String" Item="Apple" Result="{x:Null}">[FruitList]</RemoveFromCollection>
    </If.Else>
    <If.Then>
      <AddToCollection x:TypeArguments="x:String" Item="Pear">[FruitList]</AddToCollection>
    </If.Then>
  </If>
  <RemoveFromCollection x:TypeArguments="x:String" Item="Apple" Result="[Result]">[FruitList]</RemoveFromCollection>
  <If Condition="[Result]">
    <If.Then>
      <ClearCollection x:TypeArguments="x:String">[FruitList]</ClearCollection>
    </If.Then>
  </If>
</Sequence>