2016-10-26 3 views
3

Ich versuche, eine Zählvariable zu verwenden, um die Häufigkeit zu zählen, wie die Bedingung wahr ist, und sie für einen Vergleich zu verwenden. aber wenn ich es kompiliere, ist count immer bei 0, es wird nie inkrementiert, auch wenn die Bedingung wahr ist.Abrufen der Zählung von der Bedingungsanweisung

foreach (ReservationType requestReservation in RequestReservation) 
{ 
    List<String> DateList = CreateDateList(requestReservation.StartDate, requestReservation.numDays); 

    foreach (Inventory inventory in RoomInventory) 
    { 
     if (requestReservation.hotelId == inventory.HotelId) 
     { 
      if (requestReservation.roomType == inventory.RoomType) 
      { 
       int count = 0; 
       int i = 0; 
       if (DateList[i] == inventory.Date && inventory.Quantity > 0) 
       { 
        count++; 

        if (requestReservation.numDays == count) 
        { 
         requestReservation.reservationId = reservationid; 
         requestReservation.result = ReservationType.ReservationResultType.Success; 
         inventory.Quantity--; 
        } 
        else 
        { 
         requestReservation.result = ReservationType.ReservationResultType.RoomNotAvailable; 

        } 
       } 
      } 
     }      
    } 
    reservationid++; 
} 
+1

'int count = 0;' sollte außerhalb der foreach Schleife liegen –

+0

Können Sie den Wert zur Kompilierzeit ändern? Interessant –

Antwort

7

definieren count außerhalb des scope der Schleife

int count = 0; 
foreach (ReservationType requestReservation in RequestReservation) 
{ 
    List<String> DateList = CreateDateList(requestReservation.StartDate, requestReservation.numDays); 
    foreach (Inventory inventory in RoomInventory) 
    { 
     // Rest of code 
    } 
} 
Variable and Method Scope in Microsoft .NET

See - nur für den Bereich der Schleife, und am Ende des Anwendungsbereichs Die Variable definiert ist jede Bezugnahme auf sie gelöscht wird . Durch sie vor der Schleife definiert, ist es verfügbar zu dem äußeren Umfang und einen verschachtelten Bereich

Beachten Sie, dass als count auch an der falschen Stelle definiert ist, wenn Sie definiert: int i = 0; Sie überprüfen eigentlich immer die gleiche Position von 0 in Ihrem wenn Erklärung:

//i is always 0 
if (DateList[i] == inventory.Date && inventory.Quantity > 0) 
+0

Ich erkläre ich auch außerhalb der foreach, aber wie erhöhen Sie i mit dieser Methode, oder ist es besser, die for-Schleife zu verwenden, um dies zu tun? – user6875449

+0

@ user6875449 - Sie erhöhen es genau so, wie Sie es getan haben. Dies ist keine andere Methode als ein verschachtelter Bereich. –

+0

ja. jetzt aus irgendeinem Grund zählen = 13, wenn dateList [i] hat nur 4 elements.and jedes Element in dieser Liste, sollte wahr werden. also weiß ich nicht, wo die anderen 9 zählen kommen von – user6875449

1

Sie haben die Zählung in der Schleife deklariert und es wird 0 jedesmal, wenn er aus der Schleife deklarieren und es ist gonna Arbeit

1

Zählvariable definieren vor der ersten foreach-Schleife.

Verwandte Themen