#c#
#c#
Вопрос:
Используя вывод типа, мы можем написать:
var myList = new List<int>();
но на самом деле это не помогает, не так ли? Поскольку по-прежнему требуется, чтобы мы добавляли только целые числа, не было бы проще просто объявить переменную ‘int’ вместо ‘var’ ?
Комментарии:
1. Вам пришлось бы объявлять переменную как
List<int>
, а неint
.2. @nos: Ввод текста не является важной частью — чтение является.
Ответ №1:
var
Это не изменяет выходные данные компилятора — это только сокращает код.
Единственный случай, когда var
можно предложить что-то еще, касается анонимных типов:
var foo = new { Bar = 123 };
Важно понимать, что var
это не означает динамический или переменный (в том смысле, что это позволяет изменять тип объекта) — это просто позволяет вам объявить переменную и заставить компилятор вывести тип, как если бы вы его объявили.
Комментарии:
1. … и допускает анонимные типы.
Ответ №2:
IEnumerable<MadeUpEmbarrassinglyLongClassName> stupidVariable = new IEnumerable<MadeUpEmbarrassinglyLongClassName>();
против
var stupidVariable = new IEnumerable<MadeUpEmbarrassinglyLongClassName>();
Что легче читать?
Ответ №3:
Он более лаконичен, чем:
List<int> myList = new List<int>();
Я предполагаю, что это может быть легче прочитать, чем используя var, хотя в этом тривиальном случае в нем не так много.
Кроме того, если переменная названа разумно, то в любом случае должно быть достаточно ясно, к какому типу она относится.
Ответ №4:
var
Тип неизвестен, пока ему не будет присвоено значение. Как только вы присваиваете значение, оно становится typeof, которому оно присвоено. Это var
используется в ситуации, когда вы не можете определить во время компиляции, какое значение будет ему передано. Другая ситуация, var
в которой это пригодится, — это запросы LINQ. Вместо того, чтобы создавать специальный класс для обработки результатов вашего запроса, вы просто присваиваете результат var
, и он делает все остальное. Вы наверняка похвалите var
, как только начнете использовать LINQ
Комментарии:
1. var всегда известен во время компиляции. Если вы не можете сделать вывод во время компиляции, вы получите ошибку во время компиляции. Например.
var x = null
не разрешено компилировать, ноvar x = (string)null
разрешено.
Ответ №5:
В вашем примере преимущества нет. На самом деле, я считаю, что читаемость кода немного страдает (мнение).
Ответ на этот вопрос сводится к личным предпочтениям. Компилятор сделает вывод, List<int>()
если var
используется. На что бы вы предпочли обратить внимание? На что бы предпочли обратить внимание ваши коллеги?
Комментарии:
1. Как страдает читаемость?!? У вас есть тип прямо там, в строке с объявлением переменной. Как бы ввод списка<int> дважды сделал код более читаемым?
2. @AndrewAnderson, при использовании микширования страдает читаемость. Например,
var myQuery = from...select List<YourAnonType]>
. В этом случае нам нужен компилятор для вывода типа. Есть случаи (например, в OP), когда это не требуется. Я бы предпочел не проводить мысленных различий при просмотре кода. Опять же, как я уже говорил, это личное предпочтение. Не у всех мозги работают одинаково 🙂3. Раньше я думал так же, как вы, и избегал ‘var’ как чумы …. затем я увидел, как это улучшило читаемость за счет удаления cruft, и теперь любой код, который дважды объявляет тип переменной, выглядит ужасно в моих глазах.
4. @AndrewAnderson, опять же, ответ на этот вопрос полностью основан на предпочтениях.
5. Я не был не согласен с вами в моем последнем сообщении. 😉