Обновление
В ответ на этот комментарий вы оставили еще пару ответов:
Что делать, если есть несколько машин с
RegNumber 5?
Если несколько машин могут иметь одинаковый RegNumber
, то вызов Find
- неправильный подход. Find
просто перечисляет список, чтобы найти совпадение; вам будет лучше пропустить это и сохранить свой цикл foreach
.
Однако вы можете сделать ваш код более кратким, используя вместо этого Where
:
var matches = CarsForSale.Where(c => c.RegNumber == 5);
int numMatches = 0;
foreach (Car match in matches )
{
match.Color = "Red";
++numMatches;
}
if (numMatches == 0)
{
CarsForSale.Add(new Car(5, "Red"));
}
Оригинальный ответ
Весь этот цикл foreach
является избыточным: вы в основном выполняете ту же работу, которую уже выполняли, вызывая Find
.
Так что код можно упростить:
Car car = CarsForSale.Find(c => c.RegNumber == 5);
if (car != null)
{
car.Color = "Red";
}
else
{
CarsForSale.Add(new Car(5, "Red"));
}
Тем не менее, если вы ищете автомобили в вашем List<Car>
на RegNumber
, то имеет смысл использовать Dictionary<int, Car>
вместо List<Car>
:
Car car;
if (CarsForSale.TryGetValue(5, out car))
{
car.Color = "Red";
}
else
{
CarsForSale[5] = car = new Car(5, "Red");
}