Skip to main content
 首页 » 编程设计

c#之如何从集合中获取Linq

2024年02月20日28cyq1162

请让我举个例子。 比如说,我们有:

  1. 一个 CheckedListBox 控件,用于枚举一些正则表达式组的名称。
  2. 一个 TextBox 控件,用户可以在其中打印一些输入文本
  3. 如果输入文本与正则表达式匹配并向用户显示已检查(在我们的 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"); 

那么,是否有机会在不显式使用 OfType 或 Cast 方法的情况下,从 Collection 中获取类似于 CheckedItemCollection(实现类似接口(interface)列表)的 LINQ 功能?

P.S.:这只是一个例子,所以,请不要对它太挑剔..

请您参考如下方法:

不,CheckedItemCollection 是非泛型的,编译器不知道您在处理什么对象。 使用

.OfType<type>() 

尽你所能。