Только вот var, в силу своей краткости, маскирует тип результирующего объекта, что не есть хорошо...
Я по той же причине стараюсь его использовать по минимуму. Но изучая различные комментарии и рекомендации, счел что иногда он полезен и стал применять.
1. Исключение "дублирования" в коде при объявлении, например словарей:
Dictionary<int, string> dic = new Dictionary<int,string>();
Так пишется и читается легче:
var dic = new Dictionary<int,string>();
2. Скрытие промежуточных данных:
В данном примере var скрывает громоздкую часть - объявление массива, который нам не важен в данной задаче.
А посмотреть эту информацию можно, если навести на var, а также можно нажать "перейти к определению".
Также люди пишут что везде var применять не стоит, т.к. может скрыть логику программы и принести неудобство просмотра кода:
Dictionary<ObjectId, Hatch> dic = hatchIterator.GetHatch();
В данном примере можно посмотреть все типы Dictionary, ObjectId, Hatch
если переписать с var:
var dic = hatchIterator.GetHatch();
то к типам ObjectId и Hatch уже быстро не перейти с помощью "перейти к определению".