简化集合初始化

时间:2011-04-26 16:22:23

标签: c# collections initialization

在初始化WF4活动时,我们可以这样做:

Sequence s = new Sequence()
{
    Activities = {
        new If() ...,
        new WriteLine() ...,
    }
}

请注意,Sequence.ActivitiesCollection<Activity>,但可以在没有新的 Collection()的情况下进行初始化。

如何在Collection<T>属性上模拟此行为?

1 个答案:

答案 0 :(得分:2)

任何具有Add()方法和实现IEnumerable的集合都可以通过这种方式初始化。有关详细信息,请参阅Object and Collection Initializers for C#。 (缺少新的Collection<T>调用是由于对象初始化程序,并且内联项添加的能力是由集合初始化程序引起的。)

编译器将使用集合初始化块中的项自动调用类的Add()方法。


作为一个例子,这里有一段非常简单的代码来演示:

using System;
using System.Collections.ObjectModel;

class Test
{
    public Test()
    {
        this.Collection = new Collection<int>();
    }

    public Collection<int> Collection { get; private set; }

    public static void Main()
    {

        // Note the use of collection intializers here...
        Test test = new Test
            {
                Collection = { 3, 4, 5 }
            };


        foreach (var i in test.Collection)
        {
            Console.WriteLine(i);
        }

        Console.WriteLine("Press any key to exit...");
        Console.ReadKey();
    }  
}