Me faltó aclarar esto en mi comentario anterior:
el "var" de C# es
inferencia de tipos y no tiene nada que ver con los lenguajes dinámicos. Una variable declarada con var en C# sigue siendo estáticamente tipada y su tipo es fijo durante toda la existencia de la misma.
El siguiente ejemplo es INVALIDO en C#:
Este código NO COMPILA ya que a es de tipo string (para siempre) y no acepta el valor numérico 5.