Использование ключевого слова var в C#



после обсуждения с коллегами относительно использования ключевого слова " 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 выглядит следующим образом: -



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 to objects, например: -



var results = from item in someList
where item != 3
select item;


Это не лучше, чем equivilent foreach(элемент var в someList) { // ... } equivilent.



здесь есть реальная проблема безопасности типов - например, если мы должны были поместить результаты этого запроса в перегруженный метод, который принял IEnumerable и IEnumerable вызывающий объект может случайно передать неверный тип.



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

591   0  

Comments

    Ничего не найдено.