




Я большой поклонник LINQ, хотя его нужно рассматривать в перспективе, а не рассматривать как серебряную пулю.
Плюсы:
Минусы:
OrderBy для других вещей, кроме заказа, например поиск предмета с максимальной стоимостью свойстваЯ считаю, что это лучше всего при работе с запросами внутри процесса. Их легко предсказать, понять и расширить. Дополнительные технологии, такие как LINQ to XML и Parallel LINQ, великолепны. LINQ to Objects можно использовать практически где угодно.
LINQ to SQL и т. д. Действительно хороши там, где они подходят, но их сложнее понять и им нужно больше опыта. Они также применимы только в определенных областях вашего кода.
плотина, у нее много минусов, но мне она все еще нравится
Они должны переименовать сайт в Skeetoverflow IMO.
@Nathan: Да, список минусов пугает, но плюсы гораздо важнее :) Я все время скучаю по LINQ, когда пишу на Java :(
Разве чуть меньше половины списка мошенников - это вина разработчиков, а не самого LINQ?
@jfar: Возможно, но они все еще «минусы».
@jfar: поскольку легкость чтения и легкость в использовании - это плюсы языков, то легкость в понимании и легкость создания ошибки должны быть минусами :)
Я бы предложил Минус: скорость. Циклы старого стиля обычно выполняются значительно быстрее, особенно для больших наборов данных. Я отношусь к Linq двойственно, это лошади за курсы.
@SteveHibbert: Такое заявление одеяло о производительности просто требует дополнительных подробностей. В очень, очень многих случаях разница будет совершенно незначительной, независимо от размера набора данных. (Из вашего комментария даже не ясно, говорите ли вы о LINQ to Objects или о LINQ вне процесса, для начала ...)
Извинения, я не хотел скрывать порочность LINQ, я много использую Linq to XML и Linq с коллекциями, Count (), First () и т. д., Все в порядке. Мой опыт в основном связан с LinqToObjects. Пример, Except () для словарей с 1 миллионом записей был в шесть раз медленнее, чем итерация [stackoverflow.com/questions/8851155/…. Это может не иметь значения в 99% случаев, но люди должны знать о потенциальных потерях производительности с Linq to Objects.
@SteveHibbert: Да, конечно, будут случаи особый, когда это произойдет. Но я бы сказал, что это скорее исключение, чем норма. Добавлю что-нибудь подходящее с оговоркой в минусы.
Моя любимая часть: их использование для упрощения написания модульных тестов. Также цепочки IEnumerable побудили меня писать более плавные интерфейсы в моем коде.
Минусы: лямбды и методы расширения - мои молотки, а все проблемы - гвозди.
В целом: вдохнул новую жизнь в программирование на C# для меня.
Это очень красноречивые заявления. Согласен на 100%.
У них есть проблема скрытого исключения исключений из блоков try catch посредством отложенного выполнения.
Например:
var l = new List<int>() {1, 2, 3};
try
{
l.Select(x => x / 0);
}
catch
{
// error
}
l.elementAt(0); // exception occurs here outside of the try catch
Что может быть непросто в первый раз, когда вы столкнетесь с этим, особенно когда отладчик укажет вам на код внутри try-catch.
В остальном я считаю их невероятно полезными и очень экономящими время.
Написанный пример будет работать нормально. Как вы сказали, LINQ может быть хитрым, но не в том смысле, который вы подразумевали :) Вызов Select ничего не сделает - он вернет IEnumerable, который необходимо повторить, чтобы получить какой-то результат. Таким образом, исключение не возникает, это нормально и по дизайну, плюс коллекция никоим образом не будет изменена. Следовательно, последний вызов вернет 1.
Я использовал LINQ в основном для работы со сбором объектов. LINQ прекрасно работает с коллекциями объектов, в большинстве случаев устраняя необходимость в функциях предиката.
Некоторое время назад я пробовал использовать LINQ to SQL, но обнаружил, что он недостаточно мощный и неуклюжий. В частности, я не мог заставить себя использовать конструктор классов базы данных SQL. Может быть, он дает intellisense в базе данных, но кому он нужен, когда у вас есть SQL?
Однако позвольте мне сказать вам, что, безусловно, неплохо узнать больше о LINQ, поскольку количество приложений в будущем должно только увеличиваться.
Pro:
Против:
@Jon Skeet - еще один отличный ответ, вы крадете гром: P. Я полностью согласен с тем, насколько сложно писать провайдера, я в процессе написания! Вы знакомы с Барт Де Смет? У него есть много хороших примеров этого.
Похоже, хороший кандидат на вопрос сообщества Wiki