2015-11-10 4 views
-6

В этом коде с использованием foreach, даже когда я печатаю идентификатор, которого нет в списке, он все еще продолжается. Почему это происходит, и как я могу это исправить?My foreach не работает

foreach (Product item in listOfProducts) 
{ 
    if (item.Id == id) 
    { 
     item.UnitInStocks = unitsInStocks; 
     item.Price = price; 
     Console.WriteLine("the product details has been changed"); 
     Console.ReadLine(); 
    } 
    else 
     Console.WriteLine("this product id does not exist"); 
    } 
    break; 
} 
+0

Покажите нам, как вы читаете ID. Что означает «все еще идет вперед»? Пожалуйста, опишите, что происходит, что он должен делать, и шаги, которые вы предприняли, чтобы сузить проблему. Откуда приходит идентификатор? Что такое «Продукт»? какой тип 'item.Id'? Здесь много неизвестных, и моя программа с волшебным экраном, похоже, не может видеть ваш компьютер. –

+0

Также, пожалуйста, отправьте код, который выглядит несколько правильно - это 'break;' вне любого цикла не имеет смысла в текущем примере кода. –

+0

@AlexeiLevenkov Мне было интересно то же самое. Его либо петля внутри другого, либо он пропустил {после else ... – Prix

ответ

2

Похоже, вам не хватает открытой скобки после ключевого слова else. Я предполагаю, что в вашем случае был вопрос, а не ваш код, поскольку , как он сейчас стоит, этот код не будет компилироваться из-за несогласованных брекетов.

Если вы положили отсутствующую фигурную скобку, то вы набираете из цикла foreach на первой итерации, имеет ли первый продукт соответствующий идентификатор или нет.

Если вы настроены на использование foreach, то вы, вероятно, хотите что-то вроде:

var productFound = false; 
foreach (Product item in listOfProducts) 
{ 
    if (item.Id == id) 
    { 
     productFound = true; 
     item.UnitInStocks = unitsInStocks; 
     item.Price = price; 
     Console.WriteLine("the product details has been changed"); 
     break; 
    }  
} 

if (!productFound) 
{ 
    Console.WriteLine("this product id does not exist"); 
} 

Я предпочел бы избежать foreach все вместе:

var product = listOfProducts.FirstOrDefault(prod => prod.Id == id); 
if (product != null) 
{ 
    product.UnitInStocks = unitsInStocks; 
    product.Price = price; 
    Console.WriteLine("the product details has been changed"); 
} 
else 
{ 
    Console.WriteLine("this product id does not exist"); 
} 

Вам нужно using System.Linq; на В верхней части файла используется FirstOrDefault.