C # 3'te 'var' anahtar kelimesinin kullanımı ile ilgili meslektaşları ile görüştükten sonra insanların var yoluyla tür çıkarmanın uygun kullanımları hakkında ne düşündüklerini merak ettim.
Örneğin ben oldukça tembel şüpheli durumlarda var örneğin kullanılır: -
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'ın daha meşru kullanımları şunlardır: -
var l = new List<string>(); // Obvious what l will be.
var s = new SomeClass(); // Obvious what s will be.
İlginçtir ki LINQ biraz gri bir alan gibi görünüyor, örneğin: -
var results = from r in dataContext.SomeTable
select r; // Not *entirely clear* what results will be here.
IEnumerable'ı uygulayan bir tür olacağı sonuçların ne olacağı açıktır, ancak yeni bir nesneyi bildiren bir varlıkla aynı şekilde tamamen açık değildir.
Nesnelere LINQ söz konusu olduğunda daha da kötüdür, örneğin: -
var results = from item in someList
where item != 3
select item;
Bu, equeachent foreach (someList içindeki var item) {// ...} equamentent'ten daha iyi değildir.
Burada tip güvenliği ile ilgili gerçek bir endişe var - örneğin, bu sorgunun sonuçlarını IEnumerable <int> ve IEnumerable <double> kabul eden aşırı yüklenmiş bir metoda yerleştirirsek, arayan istemeden yanlış türde geçebilir.
var
yok istemeden bir yönteme türü yanlış geçerken, aşırı yükler ortalama derleyici hataları çıkarılacak olmayabilir zaman büyütülmüş bir şeyi güçlü yazarak korumak ama soru tipi tanımı hemen fark edilmeyebilir için çok tehlikeli gerçekten olup olmadığıdır.
var i = 0;
== başarısız! var c = new CrazyFrigginLongClassName();
== kazan!
var readabilityBeDamned = true;