2008-11-29 15 views
6

मैं 2.0 में एक 1.1 WinForms अनुप्रयोग पलायन कर रहा हूँ। जेनिक्स के कारण मुझे मुख्य चीजें तुरंत बदलनी चाहिए। यहाँ मैं अब तक है:जेनरिक के लिए आगे बढ़ना।

  1. सामान्य शब्दकोशों के साथ सभी hashtables बदलें
  2. सूची <>
  3. के साथ सभी arraylists बदलें सभी CollectionBase वर्गों के साथ बदलें निकाले जाते हैं: सूची <>

किसी भी दूसरों यह तुरंत किया जाना चाहिए?

thks, एके

उत्तर

7

किसी भी अन्य कहते हैं कि तुरंत किया जाना चाहिए?

आम तौर पर, जहां संभव हो, IEnumerable से IEnumerable<T> का कोई भी उल्लेख बदलें। प्रवासन बहुत सारी नाम स्थान स्विचिंग, यानि कि संयुक्त राष्ट्र import हर फ़ाइल में System.Collections ing और बदले System.Collections.Generic आयात द्वारा मदद की जा सकती।

इसके अलावा, object और/या अपने कोड में मुक्केबाजी के उपयोग के लिए खोजें और विचार करें कि यह अभी भी उचित है या जेनरिक द्वारा प्रतिस्थापित किया जाना चाहिए।

रूप jalf मुझे टिप्पणी में याद दिला दी, एक और महत्वपूर्ण परिवर्तन IComparable जहां लागू के जेनेरिक संस्करण के लिए स्विच है।

+0

और इसी प्रकार, IComparable jalf

+0

@jalf के साथ IComparable, धन्यवाद, पूरी तरह से इसके बारे में भूल गए। –

3

जेनेरिक संग्रह निश्चित रूप से उनकी अभिव्यक्ति की वजह से पसंद किया जाता है। गैर-जेनेरिक संग्रह से बदलते समय ध्यान में रखना एक बात यह है कि कभी-कभी व्यवहार अपेक्षा से अलग हो सकता है। उदाहरण के लिए, एक हैशटेबल बनाम एक इंडेक्स पर इंडेक्सर का उपयोग उन मानों के लिए अलग-अलग कार्य करेगा जो मौजूद नहीं हैं। हशटेबल वापस फेंक देगा जबकि शब्दकोश फेंक देगा।

string s = null; 
if (dic.TryGetValue(k, out s)) 
{ 
    // if we're here, k was found in the dictionary 
} 

यह तो यह समय से आगे जानने लायक है केवल क्रम पर दिखाई देगा:

Hashtable ht = new Hashtable(); 
ht.Add(1, "one"); 
string s1 = ht[1; // s1="one" 
string s2 = ht[2]; // s2=null 

var dic = new Dictionary<int, string>(); 
dic.Add(1, "one"); 
string s1 = dic[1]; // s1="one" 
string s2 = dic[2]; // throws KeyNotFoundException 

एक आम तरीका है इस संभाल करने के लिए निम्न तकनीक का उपयोग करने के लिए है।

8

मैं कुछ भी नहीं लगता कि तुरंत किया जाना चाहिए! 1.1 कोड काम करता है, है ना? जेनेरिक के थोक स्वैप के लिए व्यावसायिक मामला क्या है? 2.0 के तहत ऐप संकलित करें, इसे चलाएं और परीक्षण करें। और फिर, जैसा कि नई सुविधाओं की आवश्यकता है जो आपको जेनेरिकों का अच्छी तरह से शोषण करने देगी, जेनरिक के रूप में उन सुविधाओं को लागू करें।

+0

प्रश्न पढ़ने के दौरान मैं यही सोच रहा था। यदि आपको नहीं करना है तो कुछ भी न बदलें। जब आप नया कोड लिखने के लिए जाते हैं, जेनेरिक का उपयोग करना शुरू करें, या यदि आप मौजूदा कोड में बदलाव कर रहे हैं, तो जेनेरिक पर स्विच करें। लेकिन सब कुछ एक साथ बदलने की कोशिश मत करो। – Kibbee

2

देखें विधेयक वैगनर के नई किताब More Effective C#। जेनेरिकों के लिए आगे बढ़ने के लिए बहुत सी अच्छी युक्तियां हैं।

0

मैं List<T>CollectionBase के बजाय इस्तेमाल करने की सलाह नहीं होता। इसके बजाय, Collection<T> आपको तुलनीय ओवरराइड देता है।

0

जब तक आप पहले से ही उत्कृष्ट कोड कवरेज के साथ इकाई परीक्षण का एक सूट है, कुछ भी बदलने नहीं है अनावश्यक रूप से

अन्यथा तुम सिर्फ मुसीबत के लिए पूछ रहे हैं, busywork की खोज करने का उल्लेख नहीं ...

संबंधित मुद्दे