То, что вы хотите, выглядит примерно так:
foreach (var ospMap in sourceSpecificMaps)
{
foreach (var idMapSensorId in ospMap.SensorIds)
{
if (string.IsNullOrEmpty(idMapSensorId.SourceId))
{
// SourceId couldn't be found in the sensor. The sensor is being skipped.
continue;
}
_ospIdMapDictionary[GenCacheId(sourceId, idMapSensorId.SensorId)] = ospMap;
}
}
Как уже упоминалось выше, если вы не генерируете исключение, и единственный способ правильно обработать условие ошибки, вызванное этим исключением, - это перехватгде-то за пределами цикла, не используйте исключения для потока управления. По сравнению с простым условным тестом они чрезвычайно медленные и ресурсоемкие. Особенно в цикле, если вы получите тонну пустых идентификаторов источника, этот подход может серьезно повлиять на производительность ваших приложений.
И в вашем примере, как уже говорили другие, вы на самом деле не «обрабатываете» исключение. Вы просто игнорируете его и пропускаете оставшееся тело цикла после оператора if. Точно такое же поведение получается из приведенного выше кода.