创建未定义长度的c#对象数组?

Lyn*_*dal 13 c# arrays

我想在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++;
    }
Run Code Online (Sandbox Code Playgroud)

但是,我得到错误......"数组创建必须有数组大小或数组初始化程序"

我在foreach循环中做了很多逻辑,我为了简洁而遗漏了这些逻辑.

jas*_*onh 45

你想要做的是创造:

List<Word> words = new List<Word>();
Run Code Online (Sandbox Code Playgroud)

然后:

words.Add(new Word(word));
Run Code Online (Sandbox Code Playgroud)

最后,当你需要一个数组时完成循环:

words.ToArray();
Run Code Online (Sandbox Code Playgroud)


Jar*_*Par 10

如果您使用的是C#3.5,则可以执行以下操作.

var words = message
  .Split(new char[]{' '}) 
  .Where(x => x != "")
  .Select(x => new Word(x))
  .ToArray();
Run Code Online (Sandbox Code Playgroud)

  • 好东西.使用StringSplitOptions.RemoveEmptyEntries作为第二个Split()参数的注释将消除Where()调用.虽然它更长,但它通过字符串数组保存了另一个循环. (4认同)

sta*_*son 7

您无法创建未定义长度的数组.这是您使用通用列表的地方.

List<Word> words = new List<Word>();
Run Code Online (Sandbox Code Playgroud)