2012-07-23 68 views
1

請讓我舉個例子。 說,我們有:如何從集合中獲取Linq?

  1. 一個CheckedListBox控件枚舉一些正則表達式組的名稱。
  2. 一個TextBox控件,用戶可以在打印一些輸入文本
  3. 一個按鈕,這使得PROGRAMM檢查,如果輸入文本的正則表達式匹配,並顯示爲選中的(在我們的CheckedListBox)組的值給用戶。

讓按鈕單擊事件處理程序是這樣的:

Regex r = new Regex(@"^(?<Num5>\d{1,5})\:(?<SomeText>.{1,})$"); 
Match m = r.Match(textBox1.Text); 
if (m.Success) 
{ 
    MessageBox.Show(
     string.Concat(
      checkedListBox1.CheckedItems 
          .OfType<string>() 
          .Where(s => m.Groups[s].Success) 
          .SelectMany(s => string.Format("{0}: {1}\n", 
                  s, 
                  m.Groups[s].Value)))); 
} 
else 
    MessageBox.Show("Input text didn't match"); 

那麼,有沒有機會獲得從集合中的LINQ功能類似於CheckedItemCollection(實現類似的界面列表)沒有明確的使用ofType或Cast方法?

PS:這只是一個例子,所以,請不要對此太關鍵了..

回答

2

沒有,CheckedItemCollection是不通用的,編譯器將不知道你對付的對象。 使用

.OfType<type>() 

是你可以做的最好的。

2

編號LINQ只能在通用IEnumerable<T>上運行,但只允許在IEnumerable上運行Cast()OfType()