Используете ли ключевое слово var плохо в C # 2.0? - PullRequest
12 голосов
/ 29 апреля 2010

Я прочитал статью о , используя функции C # 3 в C # 2 , где вы можете, например, набрать var x = 2;, и даже если проект является проектом 2.0, компилятор Visual Studio 2008 подбирает его и генерирует тот же код, что и при вводе int x = 2.

Но то, что я не понимаю, стоит ли не делать это в некоторых случаях? Я всегда думал, что ключевое слово var не появилось до C # 3. Если компилятор генерирует один и тот же код, и я могу напечатать код C # 3 и код C # 2 абсолютно одинаково, то в чем разница на самом деле, поскольку CLI то же самое, верно?

Цитата по ссылке выше

За кулисами компилятор генерирует обычный код .NET 2.0.

Есть ли разница между кодом .NET 2.0 и .NET 3?

Ответы [ 5 ]

25 голосов
/ 29 апреля 2010

Боюсь, вы путаете версии C # и версии .NET.

Вы не можете использовать var в C # 2.0, компилятор будет думать, что это просто идентификатор. Но вы можете использовать его в C # 3.0, ориентируясь на .NET 2.0, поскольку var - это просто языковая (C #) конструкция, а не .NET. Компилятор .NET преобразует его в соответствующий тип в сгенерированном CIL, поэтому JIT-компилятор никогда его не увидит, и у вас все будет хорошо.

Поскольку компилятор VS2008 является компилятором C # 3.0, у вас не возникнет проблем с использованием var независимо от версии .NET, на которую вы ориентируетесь.

7 голосов
/ 29 апреля 2010

var - синтетический сахар на языке C # 3, который использует VS2008. код все еще может быть скомпилирован для совместимости с .net 2.0. Единственная проблема, с которой вам следует столкнуться, - это необходимость редактировать эти файлы в VS2005.

4 голосов
/ 29 апреля 2010

Относительно его использования.

Это неплохо с точки зрения выполнения, как уже упоминалось, это просто синтаксический сахар и заменяется во время компиляции.

При кодировании, я думаю, что его использование смешано. Например:

Я думаю, это нормально. Легко увидеть, что это за значение

var a = "test"; 

Не совсем так хорошо, многие люди вынуждены прокручивать IDE, чтобы действительно понять код, что является болью.

var b = SomeReallyLongNameSpace.SubNamespace.Namespace.Class.Enum.Value1; 

Это хорошо, вы знаете, каков результат, потому что четко определенный метод.

var c = GetString(); 

Вы не представляете с первого взгляда, что возвращается, это не полезно и будет лучше определено, чем использование ключевого слова var.

var d = GetSomething(); 
1 голос
/ 29 апреля 2010

о var: это чистый синтаксический трюк и трюк с компилятором. набрав var, вы попросите компилятор угадать тип, основываясь на правой части выражения. это легко сделать компиляцией в .net 2.0. Linq может не работать, потому что он использует сборки из .net 3.5

0 голосов
/ 29 апреля 2010

var был введен для хранения экземпляров анонимных типов в C # 3.0.

В .net2.0 может быть VS2008 или компилятор C # должен заменить его реальным типом, который уже известен во время разработки, и если вы уже знали тип во время кодирования, зачем вам использовать var! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...