Упрощенная инициализация коллекции - PullRequest
3 голосов
/ 26 апреля 2011

При инициализации действий WF4 мы можем сделать что-то вроде этого:

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

Обратите внимание, что Sequence.Activities - это Collection<Activity>, но его можно инициализировать без новой Collection () .

Как мне эмулировать это поведение в моих Collection<T> свойствах?

1 Ответ

2 голосов
/ 26 апреля 2011

Любая коллекция, которая имеет метод Add() и реализует IEnumerable, может быть инициализирована таким образом.Подробнее см. Инициализаторы объектов и коллекций для 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();
    }  
}
...