Создать массив объектов 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, который я оставил для краткости.
7 ответов
что вы хотите сделать, это создать:
List<Word> words = new List<Word>();
и затем:
words.Add(new Word(word));
и, наконец, когда цикл выполняется, если вам нужен массив:
words.ToArray();
Если вы используете C# 3.5, вы можете просто сделать следующее.
var words = message
.Split(new char[]{' '})
.Where(x => x != "")
.Select(x => new Word(x))
.ToArray();
вы не можете создать массив неопределенной длины. Здесь вы бы использовали общий список.
List<Word> words = new List<Word>();
дружественное Примечание, Вы можете передать опцию разделить, чтобы Игнорировать пустые записи. Предполагая, что никакая другая логика не обрезает записи, вы можете предварительно инициализировать свой массив следующим образом:
string[] splitWords = message.Split(new Char[] {' '},
StringSplitOptions.RemoveEmptyEntries);
Word[] words = new Word[splitWords.Length];
на самом деле вы можете использовать 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();
мне интересно, почему мы не можем просто использовать строковую переменную (скажем 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(',');
Я думаю, что это должно работать по мере необходимости, но я не пытался запустить это, поэтому я не уверен. Если кто-то думает, что мое решение неверно, пожалуйста, поправьте меня.
Я решил его, используя 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));
Я слышал, что все" создать Вопрос/ответ, чтобы документировать его для других " приемлемо. Кроме того, я хотел бы услышать, Есть ли лучшие предложения. Спасибо.