Да, используйте var
везде.
Я люблю вар. Это спасло меня от множества нажатий клавиш. Это помогает мне кодировать «первым делом» и делает рефакторинг более мощным.
Неважно, как называется тип. Intellisense говорит мне, что может делать тип, это все, что имеет значение.
Даже если бы я знал имя типа, мне бы не помогло, если intellisense не работает, потому что я не обязательно знал бы, какой конкретный метод или свойство вызывается только из одного имени типа.
Некоторые особенности, где var
делает вещи лучше:
- Вызов метода (не зная, что он возвращает - особенно если это универсальный тип)
Этот большой. Я часто не помню, что возвращает метод, но я знаю имя этого метода. Вытягивание возвращаемого типа из моей головы замедляет меня. Я просто пишу var
, вызываю метод со своими входными данными, и вуаля intellisense сообщает мне, что это за тип возвращаемого значения и что я могу с ним сделать.
// Imagine a method that creates a return type that gets some generic type from the call arguments
Tuple<TA,TB,TC,TD,TE> Combine<TA,TB,TC,TD,TE>(TA a, TB b, TC c, TD d, TE e);
// GOOD: Call this with var
var combo = Combine( "Some text", 42, true, new Dictionary<int, List<string>>(), "Other text");
// BAD: Without var
Tuple<string, int, bool, Dictionary<int, List<string>>, string> combo = Combine( "Some text", 42, true, new Dictionary<int, List<string>>(), "Other text");
- Рефакторинг типа возврата
Если я использую var
, компилятор немедленно сообщает мне, где этот тип используется неправильно (возможно, у нового возвращаемого типа нет тех же имен свойств).
Если бы я не использовал var
, я бы просто получил сообщение об ошибке при назначении типа. Затем я должен был бы изменить этот тип на новый тип (в каждом отдельном месте, где он был вызван), а затем я наконец получил предупреждение о том, что этот тип используется неправильно.
- Сосредоточьтесь на именовании переменных, а не на перепечатывании имен типов.
var
- одна из лучших вещей, которые когда-либо случались с C #.
// BAD: No var
Dictionary<int,List<Tuple<int,bool,string>>> ahhhhThatWasDifficult = new Dictionary<int,List<Tuple<int,bool,string>>>();
// GOOD: With var
// I can think of a good name before writing this complex type
var validNameCountDictionary = new Dictionary<int,List<Tuple<int,bool,string>>>();
Если я все еще не убедил вас, у вас все равно нет выбора, если вы хотите использовать:
Итак, почему бы не пройти весь путь и не использовать var
везде.
Я знаю, что это неясно, но я даже иногда буду делать это, просто чтобы всегда использовать var
и иметь последовательный взгляд на мой код:
var number = (int?) null;
Потому что я люблю вар.
P.S. Мне немного грустно, что let
заменяет var
в Typescript / ES6, но Javasctipt var
! == C # var