2009-01-16 50 views

回答

4

那麼,在枚舉中沒有內置的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; 
      } 
     } 
+0

這就是我在做什麼,現在(在foreach)。只是想拉伸我的大腦。在我目前的一個項目中,我經常循環使用這個DataGridView。它變老了。大聲笑 – BuddyJoe 2009-01-16 20:22:53

4

看到我對這個問題的回答:Update all objects in a collection using LINQ

這是不可能的內置LINQ表達式,但很容易編碼自己。爲了不干擾列表<T> .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++; 
     } 
    }