C # 3 में 'var' कीवर्ड के उपयोग के बारे में सहकर्मियों के साथ चर्चा करने के बाद, मैंने सोचा कि var के माध्यम से प्रकार के निष्कर्ष के उपयुक्त उपयोग पर लोगों की क्या राय थी?
उदाहरण के लिए मैंने संदिग्ध परिस्थितियों में lazily 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 को लागू करता है, हालांकि यह उसी तरह पूरी तरह से स्पष्ट नहीं है जिस तरह से एक नई वस्तु की घोषणा करने वाला एक संस्करण है।
यह तब और भी बुरा होता है जब यह LINQ ऑब्जेक्ट्स के लिए आता है, जैसे: -
var results = from item in someList
where item != 3
select item;
यह समतुल्य फॉर्च्यूनर (someList में var आइटम) से बेहतर नहीं है।
यहां टाइप सुरक्षा के बारे में एक वास्तविक चिंता है - उदाहरण के लिए अगर हम उस क्वेरी के परिणामों को एक अधिभार विधि में रखना चाहते थे जो IEnumerable <int> और IEnumerable <double> को स्वीकार करता है तो कॉलर अनजाने में गलत प्रकार से गुजर सकता है।
var
मजबूत टाइपिंग को बनाए रखता है, लेकिन सवाल यह है कि क्या यह वास्तव में परिभाषा पर स्पष्ट रूप से स्पष्ट नहीं होने के लिए खतरनाक है, ऐसा कुछ जो अतिभारित है जब ओवरलोड का मतलब है कि कंपाइलर त्रुटियां तब जारी नहीं की जा सकती हैं जब आप अनजाने में गलत तरीके से एक विधि से गुजरते हैं।
var i = 0;
== विफल! var c = new CrazyFrigginLongClassName();
== जीत!
var readabilityBeDamned = true;