В некоторых случаях вам нужно использовать var, например, при использовании анонимного типа, например в запросе LINQ:
var results = context.People.Select(p => new {p.PersonID, p.Name});
Видите новую строку {} там? Это возвращает класс, который генерируется во время компиляции. Поскольку у этого класса нет имени, единственный способ ссылаться на него в вашем коде - использовать «var». Это избавит вас от необходимости создавать тонны и тонны классов специального назначения только для наборов результатов LINQ.
Независимо от того, используете ли вы var просто как сокращение для другого типа, или если вы используете анонимный тип, вы все равно выполняете статическую проверку типов во время компиляции. Динамические типы не используются. Компилятор в буквальном смысле выясняет, каким должен быть тип при компиляции, поэтому программа выглядит так:
var i = 12;
i = i + "foo!";
не скомпилируется.