#c# #.net #list #oop #string-comparison
#c# #.net #Список #ооп #сравнение строк
Вопрос:
Описание
Моя цель — сравнить язык объекта меню из списка меню. Поскольку в списке меню языки предлагаются в виде другого списка, это немного усложняет задачу. Итак, я попытался создать новый объект класса с теми же значениями, чтобы я мог использовать menuList .Языки.Содержит (languageObject), однако я быстро обнаружил, что это работает не так. Я попытался создать цикл for внутри цикла for, который также не работал, но мог быть сбоем с моей стороны.
Очевидно, я не могу написать что-то вроде: MenuList .Languages.Name.Equals(«Английский»).
Из-за этого я ищу решение, в котором я могу проверить, соответствует ли имя атрибута списка языков внутри списка меню выбранному мной значению.
Объект
private LanguageBox LangEng = new LanguageBox
{
IsoCode = "eng",
Name = "English"
};
Список
var MenuList = menuDataClient.GetMenuByCity(city)
.Select(nap => new MenuBox()
{
Menu = nap.Menu,
Languages = nap.Languages
.Select(lang => new LanguageBox()
{
IsoCode = lang.IsoCode,
Name = lang.Name
}).ToList()
})
.ToList();
Цикл
for (int i = 0; i < MenuList.Count; i )
{
if (MenuList[i].Languages.Contains(LangEng))
{
System.Console.WriteLine("Success");
}
}
Комментарии:
1. Вы ищете что-то вроде
(MenuList[i].Languages.Contains(x => x.Name.Equals(LangEng)))
2. Привет, мне кажется, что это относится к a
join
; можете ли вы показать данные списка, то, что вы хотите выбрать, и желаемый результат?3. Вы можете определить
IEqualityComparer
и использовать перегрузкуContains
. Ссылка . Используйте это, если вы хотите сравнить весь объект. Если хотите сравнить только имя, используйте предложения, упомянутые @Quercus.
Ответ №1:
Может быть, linq Where может помочь? Что-то вроде:
foreach(var item in MenuList)
{
var x = item.Languages.Where(obj => obj.Name == <desired language>);
if (x.Count() > 0)
{
//Success code
break;
}
}
Ответ №2:
Я нашел решение. Эта опция LINQ работает, если вы хотите сохранить в списке только те элементы, в списке языков которых есть английский или русский.
Решение
.Where(lang => lang.Languages.Any(any => any.Name.Equals("English") || any.Name.Equals("Russian")))