Первоначальная идея LINQ не в том, чтобы модифицировать существующие коллекции, а в том, чтобы возвращать новые, поэтому такие методы, как ForEach
, не входят в число стандартных методов LINQ.
Вы можете легко написать свой собственный ForEach, например:
public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
foreach (var item in source)
action(item);
}
и ваш код станет таким:
dgv.Columns.Cast<DataGridViewColumn>.ForEach(col=>col.ReadOnly=true);
BTW ...
действительно стоит написать его как расширение LINQ, когда с2 строки старого кода императивной школы вы можете сделать то же самое?
foreach (DataGridViewColumn col in this.dataGridView1.Columns)
col.ReadOnly = true;