2015-01-25 4 views
1

Мне нужна помощь с этим циклом и правильное отображение массива в метку. Вот кодC# Для цикла и массивов

private void ErrorEquipment() 
{ 
    string[] Equips = { "Projector", "Computer", "Network", "Webcam" }; 

    for (int i = 0; i <= 3; i++) 
    { 
     if (venue.Equipment[i] == true) 
     { 
      lblEquipment.Text = ("Room Has " + Equips[i]); 
     } 
    } 
} 

То, что я хочу, чтобы проверить, если место имеет оборудование и если это так, показать то, что оборудование место имеет в этикетке. В настоящее время он проверяет это, но если место имеет более одного оборудования, и оно перезаписывает первое оборудование, которое было помещено на этикетке.

+0

вы хотите Concat всего оборудования в той же этикетке ли? –

ответ

2

Это потому, что вы переопределяете свою переменную lblEquipment.Text на каждой итерации. Попробуйте вместо этого:

lblEquipment.Text = "Room Has "; 
    for (int i = 0; i <= 3; i++) 
    { 
     if (venue.Equipment[i] == true) 
     { 
      lblEquipment.Text += Equips[i] + " "; 
     } 
    } 
1

вы заменяете каждый раз значение Ярлык lblEquipment.

вам нужно сделать String Concatenation вместо того, чтобы просто назначить новое значение.

Используйте переменную для хранения результата и затем дисплей:

string rooms ="Room Has "; 
for (int i = 0; i <= 3; i++) 
{ 
    if (venue.Equipment[i] == true) 
    rooms += ","+Equips[i]; // concatenating with previous value 
} 
lblEquipment.Text = rooms; 

вдохновило решение LINQ будет:

var result = venue.Equipment.Select((v, index) => new { v, index }) 
          .Where(pair => pair.v == true && pair.index <=3) 
          .Select(pair => Equips[pair.index]); 

lblEquipment.Text = "Room Has "+ string.Join(",",result); 
2

Вы можете это сделать что-то подобное.

lblEquipment.Text = "Room Has "; 
for (int counter = 0; counter <= 3; counter++) 
{ 
    if (venue.Equipment[counter] == true) 
     lblEquipment.Text += Equips[counter] + " "; 
} 

Но это слишком неэффективно, потому что, когда вы конкатенации строк, это всегда создает new instance of string, потому что string является неизменны, и так как вы в цикле, экземпляр вы создаете, растрачивается впустую.

Чтобы лучше реализовать это, вы должны создать объект StringBuilder, а затем ToString после цикла. Что-то вроде этого.

StringBuilder builder = new StringBuilder(); 
builder.Append("Room Has "); 
for (int counter = 0; counter <= 3; counter++) 
{ 
    if (venue.Equipment[counter] == true) 
     builder.Append(Equips[counter] + " "); 
} 
lblEquipment.Text = builder.ToString(); 

Более подробная информация о Immutable объектах здесь: C# Tips & Tricks: Immutable Types

Смежные вопросы