По ' супер-крутому способу LINQ ' вы можете говорить о том, как LINQ делает функциональное программирование намного более приемлемым с использованием методов расширения. Я имею в виду синтаксический сахар, который позволяет связывать функции визуально линейным образом (один за другим) вместо вложения (один внутри другого). Например:
int totalEven = Enumerable.Sum(Enumerable.Where(myInts, i => i % 2 == 0));
можно записать так:
int totalEven = myInts.Where(i => i % 2 == 0).Sum();
Вы видите, как легче читать второй пример. Вы также можете увидеть, как можно добавить больше функций с меньшим количеством проблем с отступами или с закрывающими скобками Lispy , появляющимися в конце выражения.
Во многих других ответах говорится, что String.Join
- это путь, потому что он самый быстрый или простой для чтения. Но если вы возьмете мою интерпретацию ' супер-крутой способ LINQ ', тогда ответом будет использование String.Join
, но оберните его в метод расширения стиля LINQ, который позволит вам визуально связать ваши функции приятный путь. Поэтому, если вы хотите написать sa.Concatenate(", ")
, вам просто нужно создать что-то вроде этого:
public static class EnumerableStringExtensions
{
public static string Concatenate(this IEnumerable<string> strings, string separator)
{
return String.Join(separator, strings);
}
}
Это обеспечит код, который является таким же быстродействующим, как прямой вызов (по крайней мере, с точки зрения сложности алгоритма), и в некоторых случаях может сделать код более читабельным (в зависимости от контекста), особенно если другой код в блоке использует стиль цепочки функций.