Невозможно применить индексирование с [] к выражению типа "System.Collections.Generic.ICollection <int> в mvc-контроллере

public ActionResult addstandardpackage1(ICollection<int> SingleStay,ICollection<int> DOUBLESTAY,ICollection<int> TRIBLESTAY,ICollection<int> FAMILYSTAY,ICollection<int> EXTRABED)
{
    var s = SingleStay;
    for (int i = 0; i < SingleStay.Count; i++ )
    {
        var cal = SingleStay[i];
    }
    foreach (var key in SingleStay)
    {
        var value = key;
    }          

}

В for Loop я получаю ошибку, например, Не могу применить индексацию с [] к выражению типа. Но мне нужно, чтобы для цикла, для каждого я получаю. потому что на основе цикла я я свяжу детали с другими списками коллекций. Пожалуйста, помогите мне.

Я получаю ошибку в var cal=Singlestay[i].

Ответ 1

Просто преобразуйте его в массив:

var s = SingleStay.ToArray();

обратите внимание, что это потребует дополнительной памяти.

Лучше всего было бы получить Array или любую другую коллекционную форму, которая в первую очередь поддерживает индексатор.

Еще один способ - реализовать его с помощью индексной переменной:

 var s = SingleStay;
 int i = 0;
 foreach (var cal in s)
 {
    //do your stuff (Note: if you use 'continue;' here increment i before)
    i++;
 }

Ответ 2

ICollection не выставляет indexer. У вас есть три варианта:

  • Измените ICollection на IList
  • Используйте ElementAt, который наследуется от IEnumerable. Но имейте в виду - он не может быть эффективным.
  • Evalute передал коллекцию в список (ToList())

ICollection (и его открытые методы) в msdn.

Ответ 3

или вы можете использовать

foreach (var item in Collection)
{
..................
}