Чем вариант 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
Одиночное наследование — это всего лишь частный случай множественного наследования.
Здравствуйте, 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();
Разница между обоими пунктами весьма размыта. Например, мне точно не нравятся подход с указанием размерности через метод-расширение. Не, могут быть случаи, когда числа без размерности использоваться не должны, но насколько эти случаи популярны?
В общем, лучше начать с простого хелпера и только после того, как убедитесь, что он будет использоваться очень часто, перейти к методу-расширению.
Здравствуйте, 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))".