Это действительно проблема читаемости вашего кода.
Мое личное предпочтение - когда-либо использовать «var» только для анонимных типов (действительно, если вы вообще хотите использовать анонимные типы, вам нужно будет использовать var), и они в основном приходят из запросов LINQ. В этих случаях у вас нет выбора, кроме как использовать var, если ваш запрос проецируется на новый (неявный и анонимный) тип.
Тем не менее, C # 3.0 с радостью позволит вам использовать var где угодно, за исключением LINQ и анонимных типов, например:
var myint = 0;
var mystring = "";
совершенно допустимо, и myint и mystring будут строго типизированы по выводимым значениям, используемым для их инициализации. (таким образом, myint - это System.Int32, а mystring - это System.String). Конечно, при взгляде на значения, используемые для инициализации переменных, довольно очевидно, к каким типам они будут неявно типизированы, однако, я думаю, что для удобочитаемости кода еще лучше, если вышеприведенное было написано как:
int myint = 0;
string mystring = "";
, поскольку вы сразу можете сразу увидеть, к какому типу относятся эти переменные.
Рассмотрим этот несколько запутанный сценарий:
var aaa = 0;
double bbb = 0;
Совершенно корректный код (если немного нетрадиционный), но из вышесказанного я знаю, что bbb является двойным, несмотря на то, что значение инициализации выглядит как int, но aaa определенно не будет double, а скорее int.