Здравствуйте!
Подскажите пожалуйста, как переписать функцию GetValues() с помощью LINQ.
И если дадите дельную ссылку на изучение LINQ(кроме MSDN), буду благодарен.
Вот код:
enum MyEnum { FIRST, SECOND };
class MyClass
{
List<MyObject> MyList = new List<MyObject>();
//constructor
internal MyClass()
{
MyList.Add(new MyObject(MyEnum.FIRST, 1));
MyList.Add(new MyObject(MyEnum.FIRST, 2));
MyList.Add(new MyObject(MyEnum.FIRST, 3));
MyList.Add(new MyObject(MyEnum.SECOND, 1));
List<int> collectedValues = GetValues(MyList, MyEnum.SECOND);
}
List<int> GetValues(List<MyObject> MyList, MyEnum ExceptionEnum)
{
List<int> returnList = new List<int>();
for(int i = 0; i < MyList.Count; i++)
{
if(MyList[i].MyName == ExceptionEnum)
continue;
returnList.Add(MyList[i].Value);
}
return returnList;
}
}
class MyObject
{
internal MyEnum MyName;
internal int Value;
public MyObject(MyEnum MyName, int Value)
{
this.MyName = MyName;
this.Value = Value;
}
}
Что-то вроде:
List<int> GetValues(List<MyObject> MyList, MyEnum ExceptionEnum)
{
return MyList.Where(i => i.MyName != ExceptionEnum).Select(i => i.Value).ToList();
}
Ваш код:
if(MyList[i].MyName == ExceptionEnum)
continue;
returnList.Add(MyList[i].Value);
Будет равен:
if(MyList[i].MyName != ExceptionEnum)
returnList.Add(MyList[i].Value);
И отсюда следует, что нам надо взять все элементы из MyList, где MyListItem.MyName != ExceptionEnum. Тут нам приходит на помощь Where-clause. Далее проходим и вытягиваем Value из каждого элемента с помощью Select-clause. И в конце просто конвертим IEnumerable в List с помощью ToList().
Насчет изучения LINQ, то посоветую сайт товарища Метанита.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники