Aracılığıyla paylaş


Genel Olmayan ForEach

.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

  1. Seçtiğiniz projeyi çözümün başlangıç projesi olarak ayarlayın:

    1. CodeTestClient , kodu kullanarak etkinliğin nasıl kullanılacağını gösterir.

    2. DesignerTestClient , tasarımcı içindeki etkinliğin nasıl kullanılacağını gösterir.

  2. Projeyi derleyin ve çalıştırın.