Linq
От: e.thrash  
Дата: 15.01.15 05:58
Оценка:
Чем вариант 2 лучше варианта 1?

var t = new int [] { 3, 2, 1};
var res = Enumerable.OrderBy(t, r => r); //1
var res2 = t.OrderBy(r => r); //2



сие прочитал в книге C# 5.0 Joseph Albahari

Shunning extension methods comes at a cost

Re: Linq
От: ZagSer168 Ниоткуда https://x.u168.ru
Дата: 15.01.15 06:08
Оценка: +1 -3
короче
Одиночное наследование — это всего лишь частный случай множественного наследования.
Re: Linq
От: Sinix  
Дата: 15.01.15 06:25
Оценка: +2
Здравствуйте, e.thrash, Вы писали:

ET>Чем вариант 2 лучше варианта 1?

Самодокументируемостью. В варианте 2 доступные методы покажет intellisense, в варианте 1 — программист должен сам помнить, в каком из static-классов живёт нужный ему хелпер.


ET>сие прочитал в книге C# 5.0 Joseph Albahari

Shunning extension methods comes at a cost

Он не про производительность — разницы нет никакой. Речь скорее всего про засирание публичного API методами-хелперами, которые нужны только в определённом контексте. Как правило это следствие или плохого дизайна, методы вообще не надо делать как extensions:
"SomeFile.txt".FileExists();
// или
"[a-z]*".Match("bla-bla-bla");


Или речь про хелперы, которые надо прятать в отдельные usings, чтоб не мешались по всему коду.
Task<int> x = ...
var y = await x.OnContext(someButton);

// или
var timeSpan = 12.Seconds();


Разница между обоими пунктами весьма размыта. Например, мне точно не нравятся подход с указанием размерности через метод-расширение. Не, могут быть случаи, когда числа без размерности использоваться не должны, но насколько эти случаи популярны?

В общем, лучше начать с простого хелпера и только после того, как убедитесь, что он будет использоваться очень часто, перейти к методу-расширению.
Re: Linq
От: andyag  
Дата: 15.01.15 06:25
Оценка:
Здравствуйте, e.thrash, Вы писали:

ET>сие прочитал в книге C# 5.0 Joseph Albahari


ET>

ET>Shunning extension methods comes at a cost


В книге: "Shunning extension methods comes at cost, however, if you want to write a query in a single statement as we did earlier".

У меня не гуглится уместный перевод "to come at cost", зато гуглится "to come at price": "to include disadvantages in order to get what you want". Если предположить, что это одно и то же, то предложение не имеет смысла.
Скорее всего автор имел в виду, что наборот "extension methods — это офигенно, потому что a().b().c() читабельнее c(b(a))".
Re[2]: Linq
От: vmpire Россия  
Дата: 15.01.15 10:22
Оценка: +2
Здравствуйте, andyag, Вы писали:

A>В книге: "Shunning extension methods comes at cost, however, if you want to write a query in a single statement as we did earlier".


A>У меня не гуглится уместный перевод "to come at cost", зато гуглится "to come at price": "to include disadvantages in order to get what you want". Если предположить, что это одно и то же, то предложение не имеет смысла.

Это одно и то же, но смысл предложение имеет:
"Однако, избегание использования методов-расширений приводит к издержкам, если вы захотите записать запрос в виде одного оператора, как мы сделали ранее"

A>Скорее всего автор имел в виду, что наборот "extension methods — это офигенно, потому что a().b().c() читабельнее c(b(a))".

Судя по тому, что написано в книге дальше — именно это он и имел в виду.
И у него ещё был второй пункт — лямбда с условием находится рядом с методом, что упрощает читаемость.
То есть, .OrderBy(filtered, n => n.Length) читается немного хуже, чем .OrderBy(n => n.Length)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.