2009-07-27 6 views
6

केवल लाभ मुझे क्या करना देख सकते हैं केवल घोषणा के आरएचएस को बदलना है।क्या निहित टाइपिंग में के लाभों सी # 3.0> +

मुझे लगता है कि यदि आप किसी संग्रह के माध्यम से गणना कर रहे हैं तो आप केवल 'var' के लिए भी कर सकते हैं और फिर बाद में इस प्रकार का पता लगा सकते हैं।

क्या यह है ?? क्या कोई अन्य बड़ा लाभ है जो मेरा कमजोर दिमाग नहीं देखता है?

+0

और जब मैं कहता हूँ मुझे पता है कि यह पहले ही रन टाइम पर टाइप किया गया है ... मैं बस आपके तर्क में था। – Matt

+0

संभावित डुप्लिकेट [सी # में var कीवर्ड का उपयोग] (http://stackoverflow.com/questions/41479/use-of-var-keyword-in-c-sharp) – nawfal

उत्तर

8

यह ज्यादातर वाक्य रचनात्मक चीनी है। यह वास्तव में आपकी वरीयता है। अज्ञात प्रकारों का उपयोग करते समय, तब var का उपयोग करना आवश्यक है। हालांकि जहां भी संभव हो, मैं निहित टाइपिंग पसंद करता हूं, यह वास्तव में LINQ के साथ चमकता है।

मुझे इसे दो बार टाइप करने के लिए अनावश्यक लगता है।

List<string> Foo = new List<string>(); 

जब मैं स्पष्ट रूप से टाइप करता हूं तो यह आसानी से भिन्न हो सकता है।

var Foo = new List<string>(); 
+3

यह पूरी तरह से चीनी नहीं है। अनाम प्रकारों के साथ काम करते समय यह आवश्यक है। – jrista

+1

सही, लेकिन यहां तक ​​कि अनाम प्रकार भी चीनी हैं। – M4dRefluX

+1

ऐसा कहने की तरह यह है कि इटेटरेटर चीनी हैं। निश्चित रूप से आप अपना खुद का निर्माण कर सकते हैं, लेकिन संकलक वास्तव में आपके लिए समान काम कर रहा है जिसमें बराबर, गेटहाशकोड और टोस्टिंग पर नॉनट्रिविअल ओवरराइड शामिल हैं। – dahlbyk

4

मैं क्या निकला एक बेहद विवादास्पद धागा होने के लिए जब मैं पहली बार यहां पर हस्ताक्षर किए ("evilness" मेरी पसंद सामान्य उपयोग का वर्णन करने के वर जाहिर है एक भयानक विकल्प था।) अनावश्यक कहने के लिए, मैं शुरू कर दिया वर के लिए और अधिक प्रशंसा की तुलना में मैं इससे पहले कि मैं कि धागा है, साथ ही यह कैसे उपयोगी इस्तेमाल किया जा सकता का एक बेहतर समझ शुरू कर दिया किया:

    :

    The evilness of 'var' in C#?

    कुछ अच्छा वर उपयोग करने के लिए कारणों

  • संक्षिप्तता
  • दोहराव (सूखी)
  • कम रिफैक्टरिंग प्रयास की कमी
  • गुमनाम प्रकार (प्रमुख कारण यह सी # में जोड़ा गया था)
0

निहित टाइपिंग के लिए व्यापक कारण LINQ प्रश्नों द्वारा उत्पादित उन जैसे गुमनाम प्रकार का समर्थन करने के था। जटिल टाइप किए गए जेनेरिक से निपटने के दौरान वे एक बड़ा लाभ भी हो सकते हैं ... Dictionary<int,List<string>> जैसे कुछ। यही कारण है कि बहुत जटिल नहीं है, लेकिन कल्पना की गणना ...

foreach KeyValuePair<int,List<string>> pair in myDictionary 
{ 

} 

निहित लेखन के साथ सरल है।

2

यह मुझे खुद को अनावश्यक दोहराने की अनुमति नहीं देता है। इस पर विचार करें:

Dictionary<string, List<int>> dict = new Dictionary<string, List<int>>(); 

हमारे पास एक बहुत लंबा टाइपनाम दो बार दो बार दोहराया गया है, बिल्कुल बिना किसी लाभ के।इसके अलावा, अगर आपको कभी भी इसे दोबारा करने की आवश्यकता है, तो आपको दो बार टाइप को अपडेट करना होगा।

var dict = new Dictionary<string, List<int>>(); 

अभी भी dict यहाँ के प्रकार के बारे में कोई संदेह है, लेकिन कोड में कम है, और मैं दावा यह आसान है कि रूप में अच्छी तरह से पढ़ने के लिए: जबकि यह सिर्फ अर्थपूर्ण रूप में है।

5

var अज्ञात प्रकारों के लिए उपयोगी है, जिनके पास आपके उपयोग के लिए नाम नहीं हैं।

var point = new {X = 10, Y = 10}; 

यह गुण एक्स और वाई के साथ एक अनाम प्रकार बना देगा। इसका मुख्य रूप से LINQ का समर्थन करने के लिए उपयोग किया जाता है। मान लीजिए आपके पास:

class Person 
{ 
    public String Name {get; set;} 
    public Int32 Age {get; set;} 
    public String Address {get; set;} 
    // Many other fields 
} 

List<Person> people; // Some list of people 

अब मान लीजिए कि मैं केवल नाम और साल की उम्र तक का चयन करना चाहते उन लोगों को जो 18 वर्ष की आयु के तहत कर रहे 18:

var minors = from person in people where person.Age < 18 select new {Name = person.Name, YearsLeft = 18 - person.Age}; 

अब minors कुछ की एक List शामिल गुमनाम प्रकार हम उन लोगों को पुन: सक्रिय कर सकते हैं:

foreach (var minor in minors) 
{ 
    Console.WriteLine("{0} is {1} years away from age 18!", minor.Name, minor.YearsLeft); 
} 

इनमें से कोई भी अन्यथा संभव नहीं होगा; हमें पूरे व्यक्ति ऑब्जेक्ट का चयन करने की आवश्यकता होगी और फिर हमारे लूप में साल की लंबाई की गणना करें, जो हम नहीं चाहते हैं।

0

वर कीवर्ड मुख्य रूप से गुमनाम प्रकारों का समर्थन करने के लिए शुरू किया गया था, मुख्य तर्क मैं इसे अधिक व्यापक रूप से इस्तेमाल करने के लिए देखा है संक्षिप्तता/अधिक पठनीय कोड के लिए है, के साथ साथ कोड की अपनी लाइन के बारे में अधिक फिटिंग:

Dictionary<string, double> data = new Dictionary<string, double>(); 
versus 
var data = new Dictionary<string, double>(); 

हालांकि अधिकांश लोगों के लिए एक अच्छा कारण नहीं है, मुझे एक अलग प्रोग्रामर के रूप में विविध कीवर्ड भी पसंद है, क्योंकि मैं कोड को पढ़ रहा हूं और इस प्रकार केवल एक सिलेबुल के बाद परिवर्तनीय नाम सुनता हूं :-)

1

असल में " var "में सी # का उपयोग अज्ञात प्रकार से निपटने के लिए किया जाता है।

की तरह: "। मुझे लगता है कि अगर आप एक संग्रह आप भी सिर्फ 'var' और उसके बाद के लिए प्रकार बाद में पता लगा सकते हैं के माध्यम से गणना कर रहे हैं"

var t = new {number = 10, name = "test"}; 
संबंधित मुद्दे