Цикл C # ограничен 50 проходами - PullRequest
2 голосов
/ 12 февраля 2009

Как ограничить цикл ниже 50, чтобы он остановился, когда достигнет 51-го предмета?

foreach (ListViewItem lvi in listView.Items)
{

}

Спасибо

Ответы [ 12 ]

23 голосов
/ 12 февраля 2009

Легко с Linq

foreach (ListViewItem lvi in listView.Items.Take(50)) {

}

Из документации MSDN:

Take <(Of <(TSource>)>) перечисляет источник и дает элементы до подсчета элементы были получены или источник не содержит больше элементов.

Если число меньше или равно ноль, источник не перечислен и пустой IEnumerable <(Of <(T>)>) вернулся.

16 голосов
/ 12 февраля 2009

Ну, foreach может быть не лучшим решением, но если вам необходимо:

int ctr = 0;
foreach (ListViewItem lvi in listView.Items) {
    ctr++;
    if (ctr == 50) break;

    // do code here

}

Примечание: цикл for обычно легче, чем использование foreach для просмотра коллекции.

Лучше использовать цикл for:

// loop through collection to a max of 50 or the number of items
for(int i = 0; i < listView.Items.Count && i < 50; i++){
    listView.Items[i]; //access the current item

}
14 голосов
/ 12 февраля 2009
foreach (ListViewItem lvi in listView.Items) {
  // do code here
  if (listView.Items.IndexOf(lvi) == 49)
    break;
}

ИЛИ, так как это элемент списка

foreach (ListViewItem lvi in listView.Items) {
  // do code here
  if (lvi.Index == 49) break;
}

Использование Linq согласно LukeDuff

foreach (ListViewItem lvi in listView.Items.Take(50)) {
  // do code here
}

Использование для цикла согласно Atomiton

// loop through collection to a max of 50 or the number of items
for(int i = 0; i < listView.Items.Count && i < 50; i++){
    listView.Items[i]; //access the current item

}
7 голосов
/ 12 февраля 2009

Используйте цикл for.

for(int index = 0; index < collection.Count && index < 50; index++)
{
   collection[index];
}
5 голосов
/ 12 февраля 2009
for(int index = 0, limit = Math.Min(50, collection.Count); index < limit; index++)
{
   collection[index];
}
3 голосов
/ 12 февраля 2009
for (int i = 0; i < 50 && i < listView.Items.Count; ++i)
{
    ListViewItem item = listView.Items[i];
}
3 голосов
/ 12 февраля 2009

Если вы все еще хотите использовать цикл foreach, попробуйте следующее:

int counter = 0;
foreach (ListViewItem lvi in listView.Items) 
{
  counter++;
  if ( counter == 50 )
  {
   break;
  }
}
1 голос
/ 12 февраля 2009

Используя LINQ, это может быть реализовано как:

foreach (ListViewItem lvi in listView.Items.Take(50))
{
  // do stuff
}

Take (n) возвращает первые n элементов или все элементы, если доступно меньше n.

1 голос
/ 12 февраля 2009

Цикл for будет работать, но вы все равно можете настроить ListViewItem с именем lvi следующим образом.

int maxItems = listViewItems.Count > 50 ? 50 : listViewItems.Count;
for(int counter = 0; counter < maxItems; counter ++)
{ 
    ListViewItem lvi = listView.Items[counter];

    // Rest of your code here will stile work

}
1 голос
/ 12 февраля 2009
int i = 50;
foreach(T t in TList)
{
   if(i-- <= 0) break;

   code;

   // or: i--; if(i<=0) break;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...