我想在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循环中做了很多逻辑,我为了简洁而遗漏了。
答案 0 :(得分:43)
您要做的是创建:
List<Word> words = new List<Word>();
然后:
words.Add(new Word(word));
最后,当你需要一个数组时完成循环:
words.ToArray();
答案 1 :(得分:10)
如果您使用的是C#3.5,则可以执行以下操作。
var words = message
.Split(new char[]{' '})
.Where(x => x != "")
.Select(x => new Word(x))
.ToArray();
答案 2 :(得分:6)
您无法创建未定义长度的数组。这是您使用通用列表的地方。
List<Word> words = new List<Word>();
答案 3 :(得分:1)
友情提示,您可以传递分割选项以忽略空条目。假设没有其他逻辑可以删除条目,您可以像这样预先初始化数组:
string[] splitWords = message.Split(new Char[] {' '},
StringSplitOptions.RemoveEmptyEntries);
Word[] words = new Word[splitWords.Length];
答案 4 :(得分:0)
实际上,您可以先使用list填充单词,然后将其轻松转换为数组,如下所示:
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();
答案 5 :(得分: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(',');
我认为这应该可以根据需要运行,但我没有尝试运行,所以我不确定。如果有人认为我的解决方案有误,请纠正我。
答案 6 :(得分:0)
您可以定义一个新列表并转换为数组...
var words = new List<Word>().ToArray();
答案 7 :(得分:-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));
我听说整个“创建问题/答案只是为了为他人记录”是可以接受的。另外,我想听听是否有更好的建议。感谢。