Если мы хотим, чтобы один IEnumerable<T>
представлял собой объединение двух IEnumberable<T>
s, мы можем использовать метод LINQ Concat()
.LINQ Конкатенация с одним дополнительным элементом
Для примера:
int[] a = new int[] { 1, 2, 3 };
int[] b = new int[] { 4, 5 };
foreach (int i in a.Concat(b))
{
Console.Write(i);
}
конечно выходов 12345
.
Мой вопрос, почему же нет перегрузки Concat()
просто принимать один элемент типа T
таким образом, что:
int[] a = new int[] { 1, 2, 3 };
foreach (int i in a.Concat(4))
{
Console.Write(i);
}
будет компилировать и производить вывод: 1234
?
Гугл по проблеме поднимает пару вопросов, в которых принятый ответ предполагает, что наилучший подход при рассмотрении вопроса заключается в том, чтобы просто сделать a.Concat(new int[] {4})
. Какой штраф (МОГ), но немного «нечистым», на мой взгляд, потому что:
- Может быть, есть падение производительности от объявления нового массива (хотя это, предположительно, будет незначительным довольно много времени Иви)
- Это просто не выглядит так аккуратно, легко читать и естественно, как
a.Concat(4)
Каждый знает, почему такая перегрузка не существует?
Также, предполагая, что мой Google не подведет меня - такого подобного метода расширения LINQ не существует, принимая один элемент типа T
.
(Я понимаю, что тривиально легко свернуть собственный метод расширения, чтобы произвести этот эффект - но разве это не делает что-то еще более странным? Я подозреваю, что это будет причина для него, но не могу представить, что это может быть)
UPDATE:
признавая пару голосов, чтобы закрыть это как мнение на основании - я должен уточнить, что я не ищу народов мнение о том, будет ли это быть хорошим дополнением к LINQ?.
Подробнее Я ищу, чтобы понять ФАКТИЧЕСКИЕ причины, почему это НЕ УЖЕ часть LINQ.
Не может быть причины для упущения. Должна быть веская причина для включения. –
@HenkHolterman Справедливая точка, но ИМХО - пара пулевых точек, о которых я упоминаю, предусматривает эту причину? Нет? –
[_ "Каждая функция начинается в отверстии на 100 пунктов, а это означает, что она должна иметь значительный положительный эффект на общий пакет, чтобы он мог превратиться в язык." _] (Http: // blogs. msdn.com/b/ericgu/archive/2004/01/12/57985.aspx) –