2015-01-19 6 views
9
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; 
    }   

} 

W pętli for jestem pojawia się błąd jak nie można zastosować z indeksowania [] w celu wyrażenia typu A Potrzebuję pętli for, dla każdego dostaję. ponieważ na podstawie pętli for wiążę szczegóły z innymi listami kolekcji. Proszę pomóż mi.Nie można stosować z indeksowania [] w celu wyrażenia typu „System.Collections.Generic.ICollection <int> w MVC kontrolera

Otrzymuję błąd w var cal=Singlestay[i].

Odpowiedz

3

Wystarczy przekonwertować go na tablicy:

var s = SingleStay.ToArray(); 

uwaga, że ​​pochłonie dodatkową pamięć chociaż.

Lepszym sposobem byłoby uzyskanie Array lub jakiejkolwiek innej kolekcji-formularza obsługującej indeksowanie w pierwszej kolejności.

Jeszcze innym sposobem byłoby wdrożyć go ze zmiennej index:

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

Dziękuję, pracuję ... – user3643560

11

ICollection nie wystawia indexer. Do wyboru są trzy opcje:

  1. Zmień ICollection do IList
  2. Zastosowanie ElementAt że jest dziedziczona z IEnumerable. Ale pamiętaj - to nie może być wydajne.
  3. oszacowania możliwych przeszedł kolekcji do listy (ToList())

ICollection (i jej narażone metody) na MSDN.

+1

Dzięki za ElementAt! – oldegreyg

+0

ElementAt jest doskonały do ​​debugowania. Dzięki! – CindyH

Powiązane problemy