Ответ 1
Анонимные типы были большими, но также уменьшали повторение в методах:
Dictionary<MyCustomType, List<MyOtherCustomType>> dict = new Dictionary<MyCustomType, List<MyOtherCustomType>>();
Возможный дубликат:
В чем смысл ключевого слова var?
Я не спрашиваю, как это работает. Я не спрашиваю, влияет ли это на производительность. Я уже знаю эти ответы.
Я хочу знать, что вдохновило команду MS С# добавить ее на язык в первую очередь. Вы не добавляете легкомысленные вещи на язык. Должна была быть проблема, которую он решил. Какова была эта проблема?
Самый близкий пример, который я видел для "проблемы, которую он решает", - это использование анонимных типов, например:
var linqResult = from element in SomeCollection s
elect new { element.A, element.B }
Ирония об этом использовании заключается в том, что руководства по стилям и правилам кодирования (например, предоставленные Microsoft) советуют кодеру избегать использования "var", когда результирующий тип не является очевидным. Другими словами, предполагаемая цель "var" противоречит стандартным стандартам кодирования.
Если бы я писал стандарты кодирования и пытался предотвратить чрезмерное использование "var", я бы несколько склонился сказать "использовать" var "только в ответ на анонимные типы". Но этот вопрос задает полный круг: что было / целью добавления "var" на язык?
Анонимные типы были большими, но также уменьшали повторение в методах:
Dictionary<MyCustomType, List<MyOtherCustomType>> dict = new Dictionary<MyCustomType, List<MyOtherCustomType>>();
Точно! Анонимные типы. Как в мире вы могли бы ссылаться на созданный анонимный тип, если бы не было var
и все еще имели intellisense вместе с ним?
Другими словами: когда не было var
, в используемом нами смысле не было бы никаких анонимных типов с поддержкой времени компиляции. Было бы слишком много ошибок времени выполнения с анонимными типами.
Добавленный сахар (сложность при злоупотреблении) заключается в том, что вы можете использовать var с даже не анонимными переменными. Конечно, это работает, но это плохая привычка.
Насколько я знаю, ключевое слово var было сделано в значительной степени, чтобы упростить LINQ, позволяя использовать анонимные типы
Из MSDN:
Во многих случаях использование var необязательный и является просто синтаксическим удобство. Однако, когда переменная инициализируется анонимным типом вы должны объявить переменную как var если вам нужно получить доступ к свойствам объекта в более поздней точке. Эта является распространенным сценарием в запросе LINQ выражения.