1

例を挙げてください。たとえば、次のものがあります。

  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 メソッドを明示的に使用せずに、CheckedItemCollection (同様のインターフェイス リストを実装) と同様のコレクションから LINQ 機能を取得する機会はありますか?

PS: これはほんの一例ですので、あまり批判しないでください..

4

2 に答える 2

2

いいえ、CheckedItemCollection は非ジェネリックであり、コンパイラはどのオブジェクトを扱っているかを知りません。使用する

.OfType<type>()

あなたができる最善のことです。

于 2012-07-23T06:31:46.737 に答える
2

いいえ。LINQ は genericIEnumerable<T>でしか動作できませんがCast()、 およびOfType()on でしか動作しませんIEnumerable

于 2012-07-23T06:32:19.423 に答える