2012-07-23 69 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()