JavaScript - это язык с динамической типизацией, в то время как c # - это (обычно) язык со статической типизацией. В результате, подобные сравнения всегда будут проблематичными. Но:
Ключевое слово JavaScript var
несколько похоже на ключевое слово C # dynamic
. Оба создают переменную, тип которой не будет известен до времени выполнения, а злоупотребление не будет обнаружено до времени выполнения. Именно так JavaScript всегда , но это совершенно новое для C # 4.
dynamic foo = new DateTime();
foo.bar(); //compiles fine but blows up at runtime.
JavaScript не имеет ничего, чтобы соответствовать var
в C #, поскольку JavaScript - это язык с динамической типизацией, а var
в C #, несмотря на распространенное заблуждение, создает переменную, тип которой известен во время компиляции . var
в C # служит двум целям: объявлять переменные, тип которых является трудной для записи, и создавать переменные анонимного типа, и поэтому не имеет типа, который может быть записан разработчиком .
Для примера первого:
var conn = new System.Data.SqlClient.SqlConnection("....");
Хороший пример второго - проекции анонимного типа из Linq-to-Sql или Entity Framework:
var results = context.People.Where(p => p.Name == "Adam")
.Select(p => new { p.Name, p.Address });
Здесь results
относится к типу IQueryable<SomeTypeTheCompilerCreatedOnTheFly>
. Независимо от того, сколько вы хотели бы выписать фактический тип результатов, вместо того, чтобы просто писать var
, это невозможно, так как вы не знаете тип, который компилятор создает под прикрытием для вашего анонимного типа - следовательно, терминология: этот тип является анонимным
В обоих случаях тип известен в время компиляции , и в обоих случаях впоследствии говорится либо
conn = new DateTime();
или
results = new DateTime();
приведет к ошибке компилятора , так как вы устанавливаете conn
и results
для типа, который не совместим с тем, что они были объявлены как .