Как использовать LINQ для заполнения List

221
06 мая 2017, 18:49

Здравствуйте!
Подскажите пожалуйста, как переписать функцию 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;
    }
}
Answer 1

Что-то вроде:

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, то посоветую сайт товарища Метанита.

READ ALSO
Как передать в Task параметр

Как передать в Task параметр

Вопрос как передать в класс Task или Task функцию с параметром, интересуют все способыСпасибо

375
Linq и большая база данных Count

Linq и большая база данных Count

Не могe решить проблему с подсчетом размера коллекцииЕсть таблица на сайте с фильтрами, там выводиться 10 записей

207
Ссылка на партнёра

Ссылка на партнёра

Имеется плагин, который парсит записи с сайта-партнёра, и сохраняет эти записи в новом произвольном типе, допустим custom_type

289
Можно получить критику кода проекта? [требует правки]

Можно получить критику кода проекта? [требует правки]

Привет ребят, хочу попросить более опытных колег посмотреть и высказать критику кода, что бы я мог узнать больше и исправитьсяВот моё приложение

214