Вы можете использовать Linq's All
, чтобы проверить, содержат ли оба Списка ингредиентов одинаковые элементы:
public void DrinkButton_Click(object sender, RoutedEventArgs e)
{
if (selectedPotion == null)
{
MessageBox.Show("Please select a potion to drink", "Help Window", MessageBoxButton.OK, MessageBoxImage.Information);
return;
}
foreach (var recipe in RecipeList)
{
bool equalIngredients = recipe.Recipe.All(selectedPotion.MyIngredients.Contains) &&
recipe.Recipe.Count == selectedPotion.MyIngredients.Count;
if (equalIngredients)
{
recipe.DrinkEffect();
return;
}
}
MessageBox.Show("Doesn't taste like anything!", "Announcement!",
MessageBoxButton.OK, MessageBoxImage.Information);
}
Это зациклит все элементы в RecipeList и проверит, равняется ли Recipe
элемента selectedPotion.MyIngredients
.Если это так, он вызовет метод DrinkEffect()
для текущего элемента, в противном случае он отображает «Не имеет вкуса!» - MessageBox.
Несколько замечаний:
recipe.Recipe
выглядит просто неправильно, возможно, стоит использовать более точное наименование - Код в настоящее время не проверяет, является ли
selectedPotion
null
или нет, я вижу потенциал для исключения NullReferenceException