Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
.NET Framework 4.6.1 include nella sua casella degli strumenti un set di attività di flusso di controllo, che consente di scorrere le raccolte ForEach<T>, incluso IEnumerable<T>.
ForEach<T> richiede che la proprietà Values sia di tipo IEnumerable<T>. Ciò impedisce agli utenti di eseguire l'iterazione sulle strutture di dati che implementano l'interfaccia IEnumerable<T> , ad esempio ArrayList. La versione non generica di ForEach<T> supera questo requisito, a scapito di una maggiore complessità di runtime per garantire la compatibilità dei tipi dei valori nella raccolta.
L'esempio NonGenericForEach mostra come implementare un'attività non generica ForEach<T> e la relativa finestra di progettazione. Questa attività può essere usata per scorrere ArrayList.
Attività ForEach
L'istruzione C#/Visual Basic foreach enumera gli elementi di una raccolta, eseguendo un'istruzione incorporata per ogni elemento della raccolta. Le attività equivalenti di WF di foreach sono ForEach<T> e ParallelForEach<T>. L'attività ForEach<T> contiene un elenco di valori e un corpo. In fase di esecuzione, l'elenco viene iterato e viene eseguito il corpo per ciascun valore nell'elenco.
Per la maggior parte dei casi, la versione generica dell'attività deve essere la soluzione preferita, perché copre la maggior parte degli scenari in cui verrebbe usata e fornisce il controllo dei tipi in fase di compilazione. La versione non generica può essere usata per scorrere i tipi che implementano l'interfaccia non generica IEnumerable .
Definizione di classe
Nell'esempio di codice seguente viene illustrata la definizione di un'attività non generica ForEach .
[ContentProperty("Body")]
public class ForEach : NativeActivity
{
[RequiredArgument]
[DefaultValue(null)]
InArgument<IEnumerable> Values { get; set; }
[DefaultValue(null)]
[DependsOn("Values")]
ActivityAction<object> Body { get; set; }
}
Corpo (opzionale) del tipo ActivityActionObject, che viene eseguito per ogni elemento della raccolta. Ogni singolo elemento viene passato al corpo tramite la relativa Argument proprietà .
Valori (facoltativo) Raccolta di elementi che vengono iterati sopra. Verificare che tutti gli elementi della raccolta siano di tipi compatibili vengano eseguiti in fase di esecuzione.
Esempio di utilizzo di ForEach
Il codice seguente illustra come usare l'attività ForEach in un'applicazione.
string[] names = { "bill", "steve", "ray" };
DelegateInArgument<object> iterationVariable = new DelegateInArgument<object>() { Name = "iterationVariable" };
Activity sampleUsage =
new ForEach
{
Values = new InArgument<IEnumerable>(c=> names),
Body = new ActivityAction<object>
{
Argument = iterationVariable,
Handler = new WriteLine
{
Text = new InArgument<string>(env => string.Format("Hello {0}", iterationVariable.Get(env)))
}
}
};
| Condizione | Messaggio | Severità | Tipo di eccezione |
|---|---|---|---|
I valori sono null |
Il valore per un argomento di attività obbligatorio 'Values' non è stato specificato. | Errore | InvalidOperationException |
ForEach Designer
L'ActivityDesigner dell'esempio è simile nell'aspetto a quello fornito per l'attività predefinita ForEach<T>. Il designer appare nella casella degli strumenti nella categoria Esempi, Attività non generiche. Il designer è denominato ForEachWithBodyFactory nella casella degli strumenti, perché l'attività espone un IActivityTemplateFactory nella casella degli strumenti, che crea l'attività con un ActivityAction correttamente configurato.
public sealed class ForEachWithBodyFactory : IActivityTemplateFactory
{
public Activity Create(DependencyObject target)
{
return new Microsoft.Samples.Activities.Statements.ForEach()
{
Body = new ActivityAction<object>()
{
Argument = new DelegateInArgument<object>()
{
Name = "item"
}
}
};
}
}
Per eseguire questo esempio
Impostare il progetto scelto come progetto di avvio della soluzione:
CodeTestClient mostra come usare l'attività usando il codice.
DesignerTestClient mostra come utilizzare l'attività nel designer.
Compilare ed eseguire il progetto.