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。

正如 LasseV.Karlsen 在下面的评论之一中所建议的那样,我尝试将委托方法移动到单独的私有静态 bool 方法中,并在那里放置一个断点。但执行从来没有打到那里。谢谢

4

1 回答 1

3

我的猜测是问题出在这一行:

if (regex.IsMatch(rc.FullName))

你为什么要检查rc.FullName?你不应该检查一下,device.FullName因为device委托中定义了什么?

作为旁注,您应该将Regex定义移到Exists调用之外以获得更好的性能。目前,它会随着循环的每次迭代而重新编译。

于 2013-01-31T12:21:13.197 回答