2009-06-21 17 views
9

मैं अपरिभाषित लंबाई के सी # में एक वस्तु सरणी बनाने और उसके बाद तो जैसे एक पाश में सरणी को भरने के लिए चाहते हैं ...अपरिभाषित लंबाई की सी # ऑब्जेक्ट सरणी बनाएं?

string[] splitWords = message.Split(new Char[] { ' ' }); 

    Word[] words = new Word[]; 
    int wordcount = 0; 
    foreach (string word in splitWords) 
    { 
     if (word == "") continue; 
     words[wordcount] = new Word(word); 
     wordcount++; 
    } 

हालांकि, मैं त्रुटि मिलती है ... "सरणी निर्माण होना आवश्यक है सरणी आकार या सरणी प्रारंभकर्ता "

मैं प्रत्याशित लूप में बहुत अधिक तर्क कर रहा हूं जिसे मैंने संक्षिप्तता के लिए छोड़ा है।

List<Word> words = new List<Word>(); 

और उसके बाद:

words.Add(new Word(word)); 

और अंत में जब पाश किया जाता है अगर आप एक सरणी की जरूरत है:

+1

आपको एक सरणी का उपयोग करने की आवश्यकता है? सूची के साथ इस तरह की चीज करना अक्सर बहुत आसान होता है - और अधिक प्रदर्शनकारी हो सकता है (वैसे भी मेरे अनुभव में)। – Bevan

उत्तर

40

क्या आप क्या करना चाहते बनाने है

words.ToArray(); 
6

आप अपरिभाषित लंबाई की सरणी नहीं बना सकते हैं। यह वह जगह है जहां आप एक सामान्य सूची का उपयोग करेंगे।

List<Word> words = new List<Word>(); 
9

यदि आप सी # 3.5 का उपयोग कर रहे हैं, तो आप बस निम्न कार्य कर सकते हैं।

var words = message 
    .Split(new char[]{' '}) 
    .Where(x => x != "") 
    .Select(x => new Word(x)) 
    .ToArray(); 
+1

यदि आपकी समस्या के लिए LINQ समाधान नहीं है, तो आप काफी मेहनत नहीं कर रहे हैं :) अच्छा है। –

+4

अच्छी चीजें। आपके दूसरे स्प्लिट() पैरामीटर के रूप में StringSplitOptions.RemoveEmptyEntries का उपयोग करके एक नोट, जहां() कॉल को खत्म कर देगा। हालांकि यह लंबा है, यह स्ट्रिंग सरणी के माध्यम से एक और पाश बचाता है। – statenjason

-2

मैं एक ArrayList का उपयोग कर और फिर दोहराने के बाद वस्तु सरणी के लिए यह कास्टिंग द्वारा इसे हल ...

string[] splitWords = message.Split(new Char[] {' '}); 
    ArrayList wordList = new ArrayList(); 
    int wordcount = 0; 
    foreach (string word in splitWords) 
{ 
     if (word == "") continue; 
     Word newWord = new Word(word); 
     wordList.Add(newWord); 
     wordcount++; 
} 
    Word[] words = (Word[])wordList.ToArray(typeof(Word)); 

मैं पूरी सुना है "/ प्रश्न बनाने के बस के लिए यह दस्तावेज़ को जवाब अन्य "स्वीकार्य है। इसके अलावा मैं सुनना चाहता हूं कि बेहतर सुझाव हैं या नहीं। धन्यवाद।

+3

अन्य उत्तरों (यानी सूची ) जेनलाली बेहतर मानी जाती है, क्योंकि ToArray() कम कोड है, और यह टाइप-सुरक्षित है (आप गलती से गैर-शब्द नहीं डाल सकते हैं। –

+0

एक सामान्य सूची का उपयोग करने का महान जवाब ... सुनिश्चित नहीं है कि मैंने पहले क्यों नहीं सोचा था। धन्यवाद! साथ ही, मुझे लगता है कि मेरा पहला अनुमान "उत्तर" के रूप में डालने का अनुमान है कि मेरे वोट पर नीचे वोट और डिंग पर विचार करना इतना अच्छा विचार नहीं था! हा – Lyndal

0

वास्तव में आप पहली बार अपने शब्दों को भरने के लिए सूची का उपयोग कर सकते हैं और फिर इस तरह सरणी के लिए आसानी से इसे परिवर्तित:

string[] splitWords = message.Split(new Char[] { ' ' }); 

List<Word> words = new List<Word>(); 
int wordcount = 0; 
foreach (string word in splitWords) 
{ 
    if (word == "") continue; 
    words.add(new Word(word)); 
    //wordcount++; 
} 

wordcount = words.count; 
return words.ToArray(); 
1

एक दोस्ताना ध्यान दें, यदि आप विकल्प पारित कर सकते हैं खाली प्रविष्टियों की अनदेखी करने के विभाजित करने के लिए। कोई अन्य तर्क मान लिया जाये कि प्रविष्टियों बाहर छँटाई तुम इतनी तरह अपने सरणी preinitialize कर सकते हैं:

string[] splitWords = message.Split(new Char[] {' '}, 
    StringSplitOptions.RemoveEmptyEntries); 
Word[] words = new Word[splitWords.Length]; 
+0

धन्यवाद, मैंने यह एक उत्तर पर एक और टिप्पणी के आधार पर किया था। धन्यवाद, मैंने अभी तक यह विकल्प नहीं खोजा था। – Lyndal

0

मैं सोच रहा हूँ कारण है कि हम सिर्फ एक स्ट्रिंग चर का उपयोग नहीं कर सकते हैं (जैसे कि x), यह प्रारंभ और पुनः प्राप्त अल्पविराम में डेटा अलग यह और बाद में string[] चर का उपयोग (जैसे कि y[]) और एक खाली सरणी प्रारंभ करने में इस प्रकार की तरह बिना इसे x.Split(',') के बराबर प्रारंभ:

string x = string.Empty; 
string msg = "hi,how,r,u,xyz"; 

void Page_Load(object sender, EventArgs e) 
    x = msg; 
    string[] y = msg.Split(','); 

मुझे लगता है कि जरूरत के मुताबिक इस काम करना चाहिए, लेकिन मैं यह इतना चलाने की कोशिश नहीं की थी मैं मुझे यकीन नहीं है। अगर कोई सोचता है कि मेरा समाधान गलत है, तो कृपया मुझे सही करें।

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