[flood] в чем прикол var C# 3.0? (использовать только внутри метода)
Наверное всетаки не var а анонимные структуры, которые как я понимаю являются просто удобными контейнерами внутри функций и не более того.
Наверное всетаки не varанонимные структуры могут присваиваться только к var, а собственно var используется только внутри метода
Пользу от var значит ты тоже не видишь?
Пользу от var значит ты тоже не видишь?польза вроде как есть, но она какая-то странная . Для отображения результата запроса где-нибудь на форме анонимные классы не подойдут, поскольку желательно не размещать запрос прям на форме. Где они могут пригодиться? При реальизации каких-нибудь расчетов, когда надо какие-нибудь параметры вытащить из базы. Да, тут они вроде полезны. Но тоже немного странно, вот мы захотели этот запрос вынести в отдельный метод (ну чтобы несколько раз его использовать и что нам теперь, для такого в общем-то привычного рефакторинга, потребуется вместо анонимного класса писать руками уже не анонимный класс?
А использовать var для не анонимных классов не рекомендуют — ухудшается читаемость кода.
Но тоже немного странно, вот мы захотели этот запрос вынести в отдельный метод (ну чтобы несколько раз его использовать и что нам теперь, для такого в общем-то привычного рефакторинга, потребуется вместо анонимного класса писать руками уже не анонимный класс?Анонимное что то нужно для меньших телодвижений. Если же тебе это что то необходимо в нескольких местах, то у него, по логике, должно быть имя.
А использовать var для не анонимных классов не рекомендуют — ухудшается читаемость кода.
Чем же
List<int> someThingList = new List<int>
читабельней чем
var someThingList = new List<int>
?
Придется делать возвращаемый тип object или IEnumerable, что сразу убивает все плюсы строгой типизации. А так как реального типа мы не знаем (анонимный класс все-таки с объектом можно будет работать только через рефлекшн.
В общем, абсолютно бесполезная получилась фича, ИМХО.
А так здорово смотрелась на презенташках!
И решить-то проблему при наличии ключевого слова var не составляло труда.
Есть у Микрософта особенности, не исчезающие с годами!
Кто не рекомендует?
Все наоборот, настоятельно рекомендуют!
Даже такая тупая реализация var, как в третьем C#, позволяет писать не такое:
Dictionary<BookKey, List<BookKey>> children = new Dictionary<BookKey, List<BookKey>>
, а такое:
var children = new Dictionary<BookKey, List<BookKey>>
и тем более теперь должно быть можно написать такое:
var comparer = delegate(Person p1, Person p2) { return p1.Age - p2.Age; }
а может быть даже такое (хотя сильно сомневаюсь):
var comparer = (Person p1, Person p2) => p1.Age - p2.Age;
(студии под рукой нет, не гарантирую компилируемость, но идея ясна).
Или последнее - лишь мечты и ничего такого не получается?
Или последнее - лишь мечты и ничего такого не получается?Между последним и предпоследним разницы никакой нет, и в обоих случаях нужно указывать слева или справа тип делегаты.
Кто не рекомендует?да вроде прям C# Reference написано
Overuse of var can make source code less readable for others. It is recommended to use var only when it is necessary, that is, when the variable will be used to store an anonymous type or a collection of anonymous types.
http://msdn2.microsoft.com/en-us/library/bb383973%28VS.90%29...
По ходу дела посмотрим как лучше этим пользоваться.
Понятно. Жаль. Походу, анонимность в третьем шарпе довольно ограничена.
Оставить комментарий
6yrop
сейчас вот помаленьку смотрю C# 3,0 и тут писать в стиле "что вижу о том пишу", поэтому сильно не пинайте за ламерские вопросы.язык запросов на первый взгляд выглядит как то, чего нам не хватало. Но запросы принято писать не прям на призенташен уровне, а все таки выносить в отдельный уровень, а тогда как передавать результат если var можно использовать только внутри метода
распечатать результат по месту это не совсем то, что нужно в реальных приложения.