1

リストを使用して、サードパーティのライブラリを使用して取得したすべてのデバイスを保存していました。Exist メソッドを使用して、リスト内にデバイスが存在するかどうかを判断しています。

bool bDeviceFound = _devicesFound.Exists(delegate(RCDevice device)
    {
        bool retVal = false;
        if (device != null)
        {
            Regex regex = new Regex(@"Floor[\d]+\/mycamera[\d]+");
            if (regex.IsMatch(device.FullName))
                retVal = true;
        }
        return retVal;
    });

問題は、デリゲートが true を返さないか、実行がデリゲート内のコードに到達しないことです。私はここで何か悪いことをしていますか? デリゲート内のコードを確認しました。正規表現は、一致が見つかるたびに true を返します。

device.FullName は IsMatch に値 "Floor1/mycamera1" を想定して true を返します。

以下のコメントの 1 つで LasseV.Karlsen が示唆したように、デリゲート メソッドを別のプライベートな静的ブール メソッドに移動して、そこにブレーク ポイントを配置しようとしました。しかし、実行は決してそこにヒットしませんでした。ありがとう

4

1 に答える 1

3

私の推測では、問題は次の行にあります。

if (regex.IsMatch(rc.FullName))

なぜあなたはチェックしていますrc.FullNameか?デリゲートで定義されているdevice.FullNameので、代わりにチェックするべきではありませんか?device

補足として、パフォーマンスを向上させるために、Regex定義を呼び出しの外に移動する必要があります。Exists現在、ループの反復ごとに再コンパイルされます。

于 2013-01-31T12:21:13.197 に答える