2009-06-21 61 views
9

我想創建在C#中未定義長度的對象數組,然後填充數組中像這樣一個循環...創建未定義長度的c#對象數組?

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++; 
    } 

但是,我得到的錯誤... 「數組創建必須有數組大小或數組初始值設定程序「

爲了簡潔,我在foreach循環中做了很多邏輯。

+1

需要使用數組嗎?用List做這類事情通常要容易得多 - 而且可以更高效(無論如何都是我的經驗)。 – Bevan 2009-06-21 00:51:37

回答

40

你想要做的是創造:

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

然後:

words.Add(new Word(word)); 

最後當循環完成,如果你需要一個數組:

words.ToArray(); 
6

你不能創建一個未定義長度的數組。這是你使用通用列表的地方。

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

如果您使用的是C#3.5,則可以執行以下操作。

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

如果沒有針對您的問題的LINQ解決方案,那麼您並不是很努力:)好的。 – 2009-06-21 00:48:12

+4

好東西。注意,使用StringSplitOptions.RemoveEmptyEntries作爲第二個Split()參數將消除Where()調用。儘管時間更長,但它通過字符串數組保存了另一個循環。 – statenjason 2009-06-21 00:58:33

-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()是更少的代碼,並且它是類型安全的(您不能意外地將非單詞放在其中。 – 2009-06-21 00:47:29

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

一個友好的音符,你可以通過選項來分離忽略空項。假設沒有其他邏輯修剪出的條目,你可以預初始化您的數組,像這樣:

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

我不知道爲什麼我們不能只使用一個字符串變量(比如x),初始化和檢索逗號分隔中的數據它後來使用string[]變量(比如​​)和初始化等於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(','); 

我覺得需要這應該工作,但我沒有嘗試運行這個讓我我不確定。如果有人認爲我的解決方案是錯誤的,請糾正我。