Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
.NET Framework 4.6.1, kendi araç kutusunda, koleksiyonlar arasında yinelemeye olanak tanıyan ForEach<T>, IEnumerable<T> dahil olmak üzere bir dizi Denetim Akışı etkinliği içerir.
ForEach<T> özelliğinin Values türünde IEnumerable<T>olmasını gerektirir. Bu, kullanıcıların arabirimi uygulayan IEnumerable<T> veri yapıları üzerinde yinelemesini engeller (örneğin, ArrayList). Genel olmayan sürümü ForEach<T> , koleksiyondaki değer türlerinin uyumluluğunu sağlamak için daha fazla çalışma zamanı karmaşıklığı pahasına bu gereksinimin üstesinden gelir.
NonGenericForEach örneği, genel ForEach<T> olmayan bir etkinliğin ve tasarımcının nasıl uygulandığını gösterir. Bu etkinlik, ArrayListüzerinde yineleme yapmak için kullanılabilir.
ForEach Etkinliği
C#/Visual Basic foreach deyimi bir koleksiyonun öğelerini numaralandırır ve koleksiyonun her öğesi için eklenmiş bir deyim yürütür.
foreach eşdeğeri WF etkinlikleri ForEach<T> ve ParallelForEach<T>'dir.
ForEach<T> etkinliği, değerlerin listesini ve bir gövdeyi içerir. Çalışma zamanında, liste yinelenir ve gövde listedeki her değer için yürütülür.
Çoğu durumda, etkinliğin genel sürümü tercih edilen çözüm olmalıdır, çünkü kullanılacağı senaryoların çoğunu kapsar ve derleme zamanında tür denetimi sağlar. Genel olmayan sürüm, genel olmayan IEnumerable arabirimi uygulayan türler arasında yinelemek için kullanılabilir.
Sınıf Tanımı
Aşağıdaki kod örneği, genel ForEach olmayan bir etkinliğin tanımını gösterir.
[ContentProperty("Body")]
public class ForEach : NativeActivity
{
[RequiredArgument]
[DefaultValue(null)]
InArgument<IEnumerable> Values { get; set; }
[DefaultValue(null)]
[DependsOn("Values")]
ActivityAction<object> Body { get; set; }
}
Gövde (isteğe bağlı) Koleksiyondaki her öğe için yürütülen, ActivityAction türündeki Object. Her bir öğe, kendi Argument özelliği aracılığıyla Gövde'ye geçirilir.
Değerler (isteğe bağlı) Üzerinde yineleme yapılan öğeler koleksiyonu. Koleksiyonun tüm öğelerinin uyumlu türlerde olup olmadığını denetlemek, çalışma zamanında gerçekleştirilir.
ForEach Kullanma Örneği
Aşağıdaki kod, bir uygulamada ForEach etkinliğinin nasıl kullanılacağını gösterir.
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)))
}
}
};
| Koşul | Mesaj | Şiddet | Özel Durum Türü |
|---|---|---|---|
Değerler şu şekildedir: null |
Gerekli etkinlik argümanı 'Değerler' için değer verilmedi. | Hata | InvalidOperationException |
ForEach Tasarımcı
Örnek için etkinlik tasarımcısı, yerleşik ForEach<T> etkinlik için sağlanan tasarımcıya benzer şekilde görünür. Tasarımcı, Örnekler, Genel Olmayan Etkinlikler kategorisindeki araç kutusunda görünür. Tasarımcı, araç kutusunda ForEachWithBodyFactory olarak adlandırılır; çünkü araç kutusunda IActivityTemplateFactory'yi açığa çıkaran ve düzgün yapılandırılmış ActivityAction ile etkinliği oluşturan bir etkinlik gösterir.
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"
}
}
};
}
}
Bu örneği çalıştırmak için
Seçtiğiniz projeyi çözümün başlangıç projesi olarak ayarlayın:
CodeTestClient , kodu kullanarak etkinliğin nasıl kullanılacağını gösterir.
DesignerTestClient , tasarımcı içindeki etkinliğin nasıl kullanılacağını gösterir.
Projeyi derleyin ve çalıştırın.