मुझे यह कोड मिल गया है:
सार्वजनिक वर्ग MyCollection: आइकलिंग & lt; स्ट्रिंग & gt; {निजी रीडोनली आइकलेंक्शन & lt; स्ट्रिंग & gt; _inner = नया संग्रह & lt; स्ट्रिंग & gt; (); सार्वजनिक शून्य जोड़ें (स्ट्रिंग आइटम) {_inner.Add (आइटम); } // & lt; - CodeContracts: unproven सुनिश्चित करता है: यह। खाते & gt; = अनुबंध। पुराने मूल्य (यह.काउंट) सार्वजनिक शून्य स्पष्ट () {_inner.Clear (); } // & lt; - CodeContracts: unproven सुनिश्चित करता है: this.Count == 0 सार्वजनिक बाल में शामिल है (स्ट्रिंग आइटम) {वापसी _inner.Contains (आइटम); // & lt; - CodeContracts: अनिश्चित सुनिश्चित करता है:! अनुबंध। परिणाम & lt; bool & gt; () || यह। खाता & gt; 0} सार्वजनिक शून्य copyTo (स्ट्रिंग [] सरणी, int arrayIndex) {_inner.CopyTo (सरणी, arrayIndex); // & lt; - CodeContracts: अनप्रोड की आवश्यकता है: सरणीइंडएक्स + यह.काउंट & lt; = array.Length} सार्वजनिक आईएनएनामेटर & lt; स्ट्रिंग & gt; GetEnumerator () {वापसी _inner.GetEnumerator (); } IEnumerator IEnumerable.GetEnumerator () {वापसी GetEnumerator (); } सार्वजनिक बाल निकालें (स्ट्रिंग आइटम) {वापसी _inner.Remove (आइटम); } सार्वजनिक int गणना {get {return _inner.Count; }} सार्वजनिक बूल आईआरडइड केवल {मिलेगा {वापसी _inner.IsReadOnly; }}} मुझे ये चेतावनियां मिलती हैं:
- जोड़ें: कोडकॉन्ट्रैक्ट्स: सुनिश्चित नहीं किया गया है:
this.Count & gt; = Contract.OldValue (यह .काउंट) - साफ़ करें: कोडकॉन्ट्रैक्ट्स: सुनिश्चित नहीं किया गया है:
this.Count == 0 - इसमें शामिल है: कोडकॉन्ट्र्रेक्ट्स: सुनिश्चित नहीं किया गया है:
! अनुबंध। परिणाम & lt; bool & gt; () || यह। खाता & gt; 0 - प्रतिलिपि: कोडकॉन्ट्रैक्ट्स: अनप्रोइड की आवश्यकता है:
सरणीइंडएक्स + यह.काउंट & lt; = array.Length कैसे करें मैं ये तय करता हूं? क्या इन्हें दबाने का कोई तरीका है?
निश्चित नहीं है कि मैं इस प्रश्न का पालन करता हूं लेकिन मैंने निम्नलिखित की कोशिश की कोड (सभी आवश्यक इंटरफेस लागू) और MyCollection myCollection = नया MyCollection {"test"}; ठीक काम किया यदि आपको अभी भी परेशानी हो रही है, तो थोड़ा और अधिक समझने की कोशिश करो।
संपादित करें: मेरे उत्तर के सवाल के अलावा मैं निम्नलिखित नोट जो संहिता संविदाओं के साथ पहला कदम उठा रहे हैं। संविदा संविदाओं को चेतावनी दिखाने के लिए प्राप्त करने के लिए स्थैतिक जांच सक्रिय होनी चाहिए (प्रोजेक्ट गुण -> कोड संविदाएं - & gt; स्थिर अनुबंध जांच करना) जो केवल यदि कोड संविदा प्रीमियम (मानक नहीं) संस्करण विजुअल स्टूडियो 2010 प्रीमियम पर या 2008 टीम सिस्टम पर स्थापित किया गया है, तो उपलब्ध है।
सार्वजनिक वर्ग MyCollection: आइकलिंग & lt; स्ट्रिंग & gt; {// सिस्टम का उपयोग करना; // System.Collections का उपयोग; // System.Collections.Generic का उपयोग कर; // System.Collections.ObjectModel का उपयोग कर; // System.Diagnostics.Contracts का उपयोग; निजी रीडोनली आइकलेंक्शन & lt; स्ट्रिंग & gt; _inner = नया संग्रह & lt; स्ट्रिंग & gt; (); #region ICollection & lt; स्ट्रिंग & gt; सदस्य सार्वजनिक शून्य जोड़ें (स्ट्रिंग आइटम) {int oldCount = Count; _inner.Add (आइटम); अनुबंध। आकलन करें (गणना & gt; = पुराना खाता); } सार्वजनिक शून्य साफ़ करें () {_inner.Clear (); अनुबंध। आकलन करें (गणना == 0); } सार्वजनिक बाल में शामिल है (स्ट्रिंग आइटम) {बूल परिणाम = _inner.Contains (आइटम); // निम्नलिखित धारणा के बिना: // "अनप्रोइड सुनिश्चित करता है:! अनुबंध। परिणाम & lt; bool & gt; () || यह। खाता & gt; 0" अनुबंध .असौम (! परिणाम || (गणना & gt; 0)); वापसी परिणाम; } सार्वजनिक शून्य copyTo (स्ट्रिंग [] सरणी, int arrayIndex) {अनुबंध.एस्यूयूयूयूयूएम (सरणीइंडएक्स + गणना & lt; = array.Length); _inner.CopyTo (सरणी, सरणी इंडेक्स); } सार्वजनिक बाल निकालें (स्ट्रिंग आइटम) {वापसी _inner.Remove (आइटम); } पब्लिक इंट गणना {प्राप्त करें (अनुबंध।) को नियुक्त करता है (अनुबंध। परिणाम & lt; int & gt; () == _inner.Count); वापसी _inner.Count; }} सार्वजनिक बूल आईआरडइड केवल {मिलेगा {वापसी _inner.IsReadOnly; }} पब्लिक इनिमेटरेटर & lt; स्ट्रिंग & gt; GetEnumerator () {वापसी _inner.GetEnumerator (); } IEnumerator IEnumerable.GetEnumerator () {वापसी GetEnumerator (); } #ेंड्रियन} 2 संपादित करें: कुछ काम के आसपास हैं, जो आपको सबसे अच्छा सूट करने वाला एक चुनें: < ओएल>
- लापता अनुबंध जोड़ें। जैसा कि उपरोक्त कोड नमूने में देखा गया है;
- कलेक्शन से निहित आइकलॉन को लागू करने के बजाय;
- उपयोग करें
समाधान देवलाब्स मंच पोस्ट से लिया गया था।
3 संपादित करें (ऑलरामेस्ट द्वारा): - जोड़ा गया
अनुबंध। संविदा.परिवर्तन और लेफ्टिनेंट; इंट & gt; () == बैकएण्डकालेक्शन.काउंट); जो कोमेट के बारे में इत्तला दे दी गई है। - जोड़ा गया
अनुबंध.आस्यूम (सरणीइंड + गणना & lt; = array कॉपी की विधि से। - हटाया गया
अनुबंध.एस्सेट (_inner.Count == 0); । < / Ol>
Comments
Post a Comment