В чем преимущество такого вывода типа?

#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. Я не был не согласен с вами в моем последнем сообщении. 😉