Я немного новичок в C#, и у меня странная проблема. Что происходит в том, что все значения, которые я добавляю в список, дублируются, и я не знаю, почему, потому что каждый раз, когда я добавляю объект в список, я повторно инициализую этот объект в следующей строке ... Вот мой код :Дублирование записей на C# список
waves=new List<EnemyWave>();
EnemyWave cur_wave=null;
for (int i=1; i<lines.Length; i++){
string[] point_b=lines[i].Split("\t"[0]);
if (point_b[0].StartsWith("[WAVE ")){
string wave_data=point_b[0].Replace("[WAVE ","");
int data=System.Convert.ToInt32(wave_data.Remove(wave_data.Length-1));
if (cur_wave==null){
cur_wave=new EnemyWave(data);
path.addPoint(System.Convert.ToInt32(point_a[0]),System.Convert.ToInt32(point_a[1]));
} else {
waves.Add(cur_wave);
cur_wave=new EnemyWave(data);
}
} else {
if (cur_wave==null){
createPath(point_a,point_b,i);
point_a=point_b;
} else {
string type=point_b[0].ToLower();
int wait_time=0;
if (point_b.Length>1 && !point_b[1].Equals("")){
wait_time=System.Convert.ToInt32(point_b[1]);
}
cur_wave.addEnemyData(type,wait_time);
}
}
}
waves.Add(cur_wave);
Итак, что важно здесь waves
и cur_wave
и, как вы видите, после того, как я добавить cur_wave
к waves
, я реинициализировать. Итак, что еще делает дубликаты? Потому что я поставил код отладки до и после waves.Add(cur_wave); cur_wave=new EnemyWave(data);
линий и на первое отладки, я получаю пункты позиции 0
правильно, но, на втором коде отладки, элементы позиций 0
были расчищены ...
EDIT
Я забыл сказать, что я использую Unity 4.2.2f1. Вот мой отладочный код:
[...]
if (point_b[0].StartsWith("[WAVE ")){
string wave_data=point_b[0].Replace("[WAVE ","");
int data=System.Convert.ToInt32(wave_data.Remove(wave_data.Length-1));
if (cur_wave==null){
cur_wave=new EnemyWave(data);
path.addPoint(System.Convert.ToInt32(point_a[0]),System.Convert.ToInt32(point_a[1]));
} else {
if (waves.Count>0){
foreach (EnemyData en_data in waves[0].getArrayEnemyData()){
Debug.Log (en_data.getType());
}
}
if(!waves.Contains(cur_wave))
waves.Add(cur_wave);
cur_wave=new EnemyWave(data);
if (waves.Count>0){
foreach (EnemyData en_data in waves[0].getArrayEnemyData()){
Debug.Log (en_data.getType());
}
}
}
} else {
[...]
Вот содержание файла.
-320 240
-220 40
220 60
320 -240
[WAVE 1000]
Weak
Weak 500
Weak 500
Weak 1000
[WAVE 1000]
Weak
Weak 500
Weak 500
[WAVE 1000]
Medium
Medium 500
Оба должны печатать отладка этого:
weak
weak
weak
weak
Но я получаю на weak
меньше, и я только получить его на первом отлаживать ... Второй один ничего не печатает ... Что не так?
я не могу проверить это прямо сейчас, но я думаю, что проблема не в последней строке, потому что, как я уже сказал, у меня есть поместите 2 кода отладки (распечатайте содержимое переменной, которая находится внутри 'waves [0]'), после и перед добавлением следующей итерации, и вначале она дала мне содержимое, но, во-вторых, оно ничего мне не давало (как «волны [0]», были заменены на «новые EnemyWave (данные);»). Кроме того, я уже проверил, что у меня нет дублированных строк (но да, они из файла =)). –
@cristianosantos модификация, которую я предложил, гарантирует, что повторение не произойдет ни на что; это рекомендуется для ваших условий.В любом случае, как сказано, ваш код вообще не учитывает повторения: входы берутся из файла, если у него разные одинаковые записи, появятся дубликаты – varocarbas
@varocarabs Это не сработало ... Я отредактирую мой вопрос и поместить код, который я использовал для отладки. Может быть, это помогает. –