Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
.NET Framework 4.6.1 menyediakan dalam kotak alatnya serangkaian Control Flow activities, termasuk ForEach<T>, yang memungkinkan iterasi melalui koleksi IEnumerable<T>.
ForEach<T> mengharuskan propertinya Values berjenis IEnumerable<T>. Ini menghalangi pengguna dari iterasi melalui struktur data yang menerapkan IEnumerable<T> antarmuka (misalnya, ArrayList). Versi ForEach<T> yang tidak generik mengatasi persyaratan ini, dengan meningkatkan kompleksitas runtime untuk memastikan kompatibilitas tipe dari nilai-nilai dalam koleksi.
Sampel NonGenericForEach menunjukkan cara menerapkan aktivitas non-generik ForEach<T> dan perancangnya. Aktivitas ini dapat digunakan untuk melakukan iterasi melalui ArrayList.
Aktivitas ForEach
Pernyataan C#/Visual Basic foreach menghitung elemen koleksi, menjalankan pernyataan yang disematkan untuk setiap elemen koleksi. Aktivitas foreach yang setara dengan WF adalah ForEach<T> dan ParallelForEach<T>. Aktivitas ForEach<T> berisi daftar nilai dan isi. Pada waktu eksekusi, daftar diulang dan blok kode dijalankan untuk setiap nilai dalam daftar.
Untuk sebagian besar kasus, versi generik aktivitas harus menjadi solusi yang disukai, karena mencakup sebagian besar skenario di mana aktivitas tersebut akan digunakan, dan menyediakan pemeriksaan jenis pada waktu kompilasi. Versi non-generik dapat digunakan untuk iterasi melalui jenis yang mengimplementasikan antarmuka non-generik IEnumerable .
Definisi Kelas
Contoh kode berikut menunjukkan definisi aktivitas non-generik ForEach .
[ContentProperty("Body")]
public class ForEach : NativeActivity
{
[RequiredArgument]
[DefaultValue(null)]
InArgument<IEnumerable> Values { get; set; }
[DefaultValue(null)]
[DependsOn("Values")]
ActivityAction<object> Body { get; set; }
}
Isi (opsional) ActivityAction dari jenis Object, yang dieksekusi untuk setiap elemen dalam koleksi. Setiap elemen individu diteruskan ke dalam Badan melalui propertinya Argument.
Nilai (opsional) Kumpulan elemen yang diulang. Memastikan bahwa semua elemen koleksi memiliki jenis yang kompatibel dilakukan saat runtime.
Contoh Penggunaan ForEach
Kode berikut menunjukkan cara menggunakan aktivitas ForEach dalam aplikasi.
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)))
}
}
};
| Keadaan | Pesan | Tingkat Keparahan | Tipe Pengecualian |
|---|---|---|---|
Nilai adalah null |
Nilai untuk argumen aktivitas yang diperlukan 'Nilai' tidak disediakan. | Kesalahan | InvalidOperationException |
Perancang ForEach
Perancang aktivitas pada contoh ini mirip dengan tampilan perancang yang disediakan untuk aktivitas bawaan ForEach<T>. Perancang muncul di kotak alat di kategori Sampel, Aktivitas Non-Generik . Desainer bernama ForEachWithBodyFactory di kotak alat, karena aktivitas mengekspos IActivityTemplateFactory di kotak alat, yang membuat aktivitas yang dikonfigurasi dengan benar menggunakan ActivityAction.
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"
}
}
};
}
}
Untuk menjalankan sampel ini
Atur proyek pilihan Anda sebagai proyek start-up solusi:
CodeTestClient menunjukkan cara menggunakan aktivitas menggunakan kode.
DesignerTestClient menunjukkan cara menggunakan aktivitas dalam perancang.
Bangun dan jalankan proyek.