2011-01-25 13 views
5

मैं एक प्रोग्राम बनाने की कोशिश कर रहा हूं जो एक वेक्टर बनाएगा, 100 यादृच्छिक संख्याएं उत्पन्न करेगा (0 99) और फिर उपयोगकर्ता से पूछें इनपुट चाहे वे उच्च से निम्न या निम्न से उच्च तक क्रमबद्ध संख्या चाहते हैं।जेनेरिक प्रकार 'System.Collections.Generic.List <T>' की आवश्यकता है '1' प्रकार तर्क

यह वह कोड है जो मैंने अभी तक वेक्टर काम करने की कोशिश कर रहा है।

using System; 
using System.Collections.Generic; 
using System.Collections.Generic.List; //this is where the error comes. 
using System.Linq; 
using System.Text; 

namespace System.Collections.Generic 
{ 
    class List<T> 
    { 
     static void Main(string[] args) 
     { 
      List<int> vectorList = new List<int>(); 
      vectorList.Capacity(100); 
      int i = 100; 
      for (int x = 0; x <= 100; x++) 
      { 
       Random rand = new Random(); 
       i = rand.Next(0, 100); 
       vectorList.Add(i); 
       Console.WriteLine(i); 
      } 
     } 
    } 
} 

छोड़कर मुझे नहीं पता कि इस समस्या को कैसे ठीक किया जाए, किसी भी मदद की बहुत सराहना की जाएगी।

+6

आप 'System.Collections.Generic.List ' का पुन: दावा क्यों कर रहे हैं? – BoltClock

+0

आपको सी # प्रोग्राम के विभिन्न तत्वों के बारे में कुछ भ्रम लगता है। मैंने नीचे दिए गए मेरे उत्तर में इनमें से कुछ को संबोधित करने का प्रयास किया है; हालांकि, मैं सुझाव दूंगा कि आप सी # भाषा में विभिन्न संरचनाओं के बारे में पढ़ने के लिए कुछ समय दें ताकि आप उन्हें प्रभावी ढंग से और उचित तरीके से उपयोग कर सकें। – LBushkin

उत्तर

9

यह एक पक्ष मुद्दा है (BoltClock यह सही है), लेकिन यह बदलने के लिए:

List<int> vectorList = new List<int>(); 
vectorList.Capacity(100); 
इस के लिए

:

List<int> vectorList = new List<int>(100); 

इसके अलावा, अपने वर्ग के नाम से <T> को हटा दें।

+0

मेरे उत्तर के तहत दो त्रुटियों ओपी सूचियों का स्रोत होने लगता है। उन त्रुटियों से यह समझा जाएगा कि उनके पास पहले स्थान पर 'उपयोग' निर्देश क्यों था। – BoltClock

+0

यह पूरी तरह से काम किया! बहुत बहुत धन्यवाद। – Cistoran

9

using लाइन निकालें; List एक वर्ग है, नामस्थान नहीं है, इसलिए आपको इसे "उपयोग" करने की आवश्यकता नहीं है।

आपकी Main() विधि को अपनी कक्षा में भी होना चाहिए; सी # Main() विधि जोड़ने के लिए किसी मौजूदा वर्ग को फिर से परिभाषित करने की अनुमति नहीं देता है।

इसके अलावा, Joel Coehoorn's answer आपके द्वारा होने वाली समस्या को हल करेगा, मुझे विश्वास है कि आपने पहले using लाइन को पहले स्थान पर रखा है, और LBushkin's advice हेडिंग के लायक है।

+0

जब मैं लाइन को हटा देता हूं तो यह मुझे दो और त्रुटियां देता है। 'System.Collections.Generic.List ' में 'क्षमता' के लिए परिभाषा नहीं है और 'सिस्टम' के पहले तर्क को स्वीकार करने वाली कोई विस्तार विधि 'क्षमता' नहीं है। सिस्टम। चयन। जेनेरिक। सूची 'मिल सकता है (क्या आप एक प्रयोग निर्देश या एक असेंबली संदर्भ गुम है?) और एक त्रुटि जो बस इसी तरह पढ़ती है, जोड़कर क्षमता की जगह है। – Cistoran

+0

@Cistoran: जोएल Coehoorn उसके जवाब में समाधान है। – BoltClock

1

निकालें:

using System.Collections.Generic.List; 

सूची जेनेरिक नाम स्थान जो आप पहले से ही "का उपयोग कर रहे हैं" में निहित है।

1

आपको केवल नामस्थान आयात करने की आवश्यकता है। तो अपमानजनक रेखा को हटा दें।

इसके अलावा, आपने अपनी प्रोग्राम कक्षा को सामान्य List<T> घोषित कर दिया है। आपको इसकी आवश्यकता नहीं है, आपका प्रवेश बिंदु सिर्फ सामान्य स्थैतिक वर्ग में होना चाहिए।

8

ऐसी कई चीजें हैं जो आप यहां कर रहे हैं जो एक अच्छा विचार नहीं है, और कुछ त्रुटियों के लिए सीधे जिम्मेदार हैं जिन्हें आप प्राप्त करने जा रहे हैं।

सबसे पहले, सी # में, using निर्देश का उद्देश्य पूरे नामस्थान की पहचान करना है जिसे आप निर्भर करेंगे - और उस नामस्थान में उजागर सभी प्रकार। लाइन

using System.Collections.Generic.List 

एक नाम स्थान का उल्लेख नहीं है, लेकिन एक प्रकार (List<T>) के लिए - और उचित नहीं है।

अगला, आप अपने प्रोग्राम के मुख्य वर्ग के रूप में एक सामान्य वर्ग List<T> बनाने की कोशिश कर रहे हैं ... और System.Collections.Generic नामस्थान में कम नहीं है। खैर, यह मौजूदा .NET List<T> वर्ग के साथ संघर्ष करेगा - इसलिए आपको इससे भी त्रुटियां मिलेंगी।

आप जो वास्तव में यहां करना चाहते हैं वह एक नामस्थान बना रहा है जो आपके द्वारा लिखे गए प्रोग्राम (या वर्णन) से जुड़ा हुआ है। मौजूदा का पुनः उपयोग करने की कोशिश मत करो।उस उद्देश्य के लिए नेट फ्रेमवर्क नेमस्पेस। और अपनी कक्षा List<T> नाम न दें।

अंत में, आपकी कक्षा वास्तव में एक सामान्य वर्ग नहीं है ... प्रकार पैरामीटर T प्रोग्राम कोड में किसी भी उद्देश्य के लिए उपयोग नहीं किया जाता है। और आपकी कक्षा एक सूची का कार्यान्वयन नहीं है ... यह एक सूचीप्रोसेसर है (या उन पंक्तियों के साथ कुछ)। किसी प्रोग्राम में कक्षाओं या इंटरफेस नामकरण करते समय आपको सावधान रहना चाहिए ताकि उनके नाम पर उनके साथ मजबूत संबंध हो। यह भी एक अच्छा विचार है (जब संभव हो) उन नामों से बचने के लिए जो पहले से ही .NET ढांचे में सामान्य कक्षाओं द्वारा उपयोग किए जाते हैं - क्योंकि इससे आपके कोड में अस्पष्टता और भ्रम पैदा हो सकता है।

+0

+1 महान सलाह! मैंने वास्तव में कहा था कि मौजूदा नामस्थान/कक्षाओं को फिर से शुरू करना अवैध है ... – BoltClock

+0

हाँ, मैं एमएसडीएन पर पढ़ रहे सामानों को प्रतिबिंबित करने के लिए चारों ओर कुछ सामान बदल रहा था, जिसे अब मुझे पता है कि मेरे मुद्दे से कोई लेना देना नहीं है। यह सलाह ध्वनि है हालांकि यह बहुत सराहना की है। – Cistoran

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