Создание экземпляра IEnumerable <IEnumerable <T>> с массивом в C # - PullRequest
2 голосов
/ 09 июля 2011

Возможно, мне что-то не хватает с синтаксисом построения массива в c #. Если у меня есть следующая функция (благодаря функции дисперсии типов в C # 4):

IEnumerable<IEnumerable<T>> test<T>()
{
        return new List<List<T>>();
}

Как я могу написать аналогичный, который создает экземпляр массива массива?

1 Ответ

3 голосов
/ 09 июля 2011
IEnumerable<IEnumerable<T>> test<T>()
{
        return new [] { new T[] {} };
}

Я заметил, что когда-то была ошибка в моно-компиляторе (по крайней мере, 2.6.7 gmcs приводила к сбою ...), которая требовала от вас написания new IEnumerable<T>[] { new T[] {}}; Это больше не проблема, например, моно 2.11

В качестве альтернативы

вы могли бы использовать блок доходности (который был бы менее эффективным)

IEnumerable<IEnumerable<T>> test<T>()
{
        yield return new T[] {};
}

Enumerable.Empty<>

Вам известно о Enumerable.Empty<>?

IEnumerable<IEnumerable<T>> test<T>()
{
        return Enumerable.Empty<IEnumerable<T>>();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...