Подтвердить что ты не робот

Использование var или не использование var

Возможный дубликат:
С# 'var' против производительности определенного типа

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

var myString = GetAnyString();
var myInstance = GetClass();

вместо

string myString = GetAnyString();
MyClass myInstance = GetClass();

Помимо читаемости (я думаю, что использование var не очень читаемо), есть ли какие-либо преимущества и/или недостатки, использующие его? Как насчет производительности

4b9b3361

Ответ 1

var заменяется компилятором с правильным типом, поэтому нет производительности производительности во время выполнения, кроме очень небольшого времени на сборке, возможно (veeeeeeeery small).

Собственно, из точки удобочитаемости vue я лично делаю следующее:

  • Переменные экземпляры: object myVar = new object();

  • Переменное распространение: var myVar = anotherVar.getComplexObject();

Кроме того, у вас может возникнуть соблазн использовать их при создании очень сложного типа, например:

var myDict = new Dictionary<string, List<Tuple<string, object>>>();

Здесь он действительно улучшает читаемость.

Ответ 2

Это субъективно, но я не люблю использовать vars. Что касается меня, они не улучшают читаемость.

Но общее руководство по использованию var следующее:

Используйте var, когда совершенно ясно, какой тип переменной объявляется:

Dictionary<string, Dictionary<string, string>> varOfSomeLongType = new Dictionary<string, Dictionary<string, string>>();

или когда вы объявляете переменную анонимного типа:

var linqResult = from element in SomeCollection
                 select new { element.A, element.B }

Ответ 3

Есть ли какие-либо преимущества и/или недостатки, используя его?

Преимущество: меньше набрав.

(я думаю, что использование var не очень читаемо)

Я частично согласен с этой точкой.

Это менее читаемо, если у вас var s = foo(); вместо string s = foo;. В других случаях это может быть более читаемым.

Как насчет производительности

Во время выполнения нет никакой разницы. Компилятор преобразует его в один и тот же промежуточный код, как если бы вы явно указали тип.