Возможно ли поднабор списка объектов пользовательских классов на основе параметра этих объектов? (без LINQ)

То, что я пытаюсь достичь в C# без использования LINQ, - это создать подмножество списка объектов пользовательского класса на основе значения одного из параметров этих объектов.

Допустим, объявление моего списка выглядит следующим образом:

List<MyCustom> listofobj = new List<MyCustom>();

Также предположим, что объект пользовательского класса "MyCustom" может возвращать два параметра: MyCustom.name и MyCustom.age.

Есть ли способ, с помощью которого я могу извлечь и сохранить во временный новый список (назовем его "templist") подмножество исходного списка (то есть "listofobj"), сформированный всеми его объектами MyCustom, у которых параметр "age" больше чем 30? Спасибо!

2 ответа

Решение

Таким образом вы получаете подмножество исходного списка на основе параметров без linq.

List<MyCustom> listofobj = new List<MyCustom>();
List<MyCustom> templist = new List<MyCustom>();

foreach(var obj in listofobj)
{
    if(obj.Age > 30)
    {
        templist.Add(obj); 
    }
}

Вы также можете использовать этот Linq.

templist = listofobj.Where(obj => obj.Age > 30).ToList();

Linq медленнее, чем обычный код в целом. но это не должно быть проблемой, если это не горячий путь в вашем коде. разница в производительности незначительна.

Конечно. Вы можете заново изобрести LINQ:

IEnumerable<MyCustom> WhereByAge(IEnumerable<MyCustom> source, int age)
{
    foreach (MyCustom myCustom in source)
    {
        if (myCustom.Age > age)
        {
            yield return myCustom;
        }
    }
}

затем:

List<MyCustom> filteredList = new List(WhereByAge(listofobj, 30));

Но почему? Я настоятельно рекомендую, если вы хотите LINQ-подобное поведение, просто используйте LINQ.

Другие вопросы по тегам