C # - Лямбда-синтаксис для цикла по DataGridView.Rows - PullRequest
1 голос
/ 16 января 2009

Каков правильный лямбда-синтаксис в C # для зацикливания каждого DataGridViewRow DataGridView? И в качестве примера допустим, что функция создает строку .Visible = false на основе некоторого значения в ячейках [0].

Ответы [ 2 ]

4 голосов
/ 16 января 2009

Смотрите мой ответ на этот вопрос: Обновите все объекты в коллекции, используя LINQ

Это невозможно с помощью встроенных выражений LINQ, но очень легко написать код самостоятельно. Я вызвал метод Iterate, чтобы не мешать List .ForEach.

Пример:

dataGrid.Rows.Iterate(r => {r.Visible = false; });

Итерация Источник:

  public static void Iterate<T>(this IEnumerable<T> enumerable, Action<T> callback)
    {
        if (enumerable == null)
        {
            throw new ArgumentNullException("enumerable");
        }

        IterateHelper(enumerable, (x, i) => callback(x));
    }

    public static void Iterate<T>(this IEnumerable<T> enumerable, Action<T,int> callback)
    {
        if (enumerable == null)
        {
            throw new ArgumentNullException("enumerable");
        }

        IterateHelper(enumerable, callback);
    }

    private static void IterateHelper<T>(this IEnumerable<T> enumerable, Action<T,int> callback)
    {
        int count = 0;
        foreach (var cur in enumerable)
        {
            callback(cur, count);
            count++;
        }
    }
4 голосов
/ 16 января 2009

Ну, нет встроенного ForEach метода расширения для перечислимого. Интересно, не проще ли простой цикл foreach? Хотя писать тривиально ...

На толчке, может быть, вы могли бы с пользой использовать Where здесь:

        foreach (var row in dataGridView.Rows.Cast<DataGridViewRow>()
            .Where(row => (string)row.Cells[0].Value == "abc"))
        {
            row.Visible = false;
        }

Но лично я бы просто использовал простой цикл:

        foreach (DataGridViewRow row in dataGridView.Rows)
        {
            if((string)row.Cells[0].Value == "abc")
            {
                row.Visible = false;
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...