1

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

  1. 枚举一些正则表达式组名称的 CheckedListBox 控件。
  2. 一个 TextBox 控件,用户可以在其中打印一些输入文本
  3. 一个 Button,它使程序检查输入文本是否与正则表达式匹配并向用户显示已检查(在我们的 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(实现类似接口列表)的 LINQ 功能?

PS:这只是一个例子,所以,请不要太挑剔..

4

2 回答 2

2

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

.OfType<type>()

是你能做的最好的。

于 2012-07-23T06:31:46.737 回答
2

不能。LINQ 只能在 generic 上运行IEnumerable<T>,但只能在Cast()OfType()上运行IEnumerable

于 2012-07-23T06:32:19.423 回答