Після обговорення з колегами щодо використання ключового слова "var" у C # 3 я задумався, які думки людей щодо відповідного використання виводу типу через var?
Наприклад, я досить ліниво використовував var в сумнівних обставинах, наприклад:
foreach(var item in someList) { // ... } // Type of 'item' not clear.
var something = someObject.SomeProperty; // Type of 'something' not clear.
var something = someMethod(); // Type of 'something' not clear.
Більш законними способами використання є наступні:
var l = new List<string>(); // Obvious what l will be.
var s = new SomeClass(); // Obvious what s will be.
Цікаво, що LINQ здається трохи сірою зоною, наприклад:
var results = from r in dataContext.SomeTable
select r; // Not *entirely clear* what results will be here.
Зрозуміло, які результати будуть у тому, що це буде тип, який реалізує IEnumerable, однак це не зовсім очевидно, як і var, який оголошує новий об'єкт.
Ще гірше, якщо мова йде про LINQ до об'єктів, наприклад: -
var results = from item in someList
where item != 3
select item;
Це не краще, ніж еквівалентний foreach (var item у someList) {// ...} equivilent.
Тут існує справжня стурбованість щодо безпеки типу - наприклад, якщо ми розмістимо результати цього запиту в перевантажений метод, який прийняв IEnumerable <int> та IEnumerable <double>, що абонент може ненавмисно перейти у неправильний тип.
var
це підтримувати строгу типізацію , але питання в тому , чи дійсно це небезпечно для типу не буде відразу видно по визначенню, то , що збільшується при перевантаженнях середніх помилок компілятора не можуть бути видані , якщо ви ненавмисно передати неправильний тип методі.
var i = 0;
== провал! var c = new CrazyFrigginLongClassName();
== виграй!
var readabilityBeDamned = true;