Методы списков С#

Необходимо из списка удалить все элементы с непарными индексами. Мое решение (весьма колхозное) выглядит так:

class Program
{
    static void Main(string[] args)
    {
        List<int> lists = new List<int>()
        {
            0,1,2,3,4,5,6,7,8,9,10
        };
        for (int i = 0; i < lists.Count; i++)
        {
            if (i % 2 != 0)
            {
                lists.Remove(lists[i]);
                lists.Insert(i, 0);
            }
        }
        for (int i = 0; i < lists.Count; i++)
        {
            if (lists[i] == 0)
            {
                lists.RemoveAt(i);
            }
        }
        Console.WriteLine();
        Console.WriteLine();
        
        for (int i = 0; i < lists.Count; i++)
        {
            Console.WriteLine(lists[i]);
        }
    }

Список создан учебный, потом будет ввод. Цифры в порядке возрастания сделаны для удобства.

Вопрос: как оптимизировать код и сделать его более удобным для чтения? (Метод для отбора элементов в с#, в Java - RemoveIf(нужен аналог)).


Ответы (1 шт):

Автор решения: Aziz Umarov

Вот так посмотрите

    static void Main(string[] args)
    {
        List<int> lists = new List<int>()
    {
        0,1,2,3,4,5,6,7,8,9,10
    };
        for (int i = lists.Count - 1 ; i > 0; i--)
        {
            if (i % 2 != 0)
            {
                lists.Remove(lists[i]);
                //lists.RemoveAt(i); по вашему усмотрению
            }
        }
        Console.WriteLine();

        for (int i = 0; i < lists.Count; i++)
        {
            Console.WriteLine(lists[i]);
        }
    }

А по хорошему не заморачивайтесь с циклами и изучайте Linq

   static void Main(string[] args)
    {
        List<int> lists = new List<int>()
        {
            0,1,2,3,4,5,6,7,8,9,10
        };

        lists.Where((number, index) => index % 2 == 0).ToList().ForEach(i => Console.WriteLine(i));
    }
→ Ссылка