Исключения, сгенерированные из скомпилированного выражения, обычно обрабатываются конструкцией try .. catch
, поэтому я ожидаю, что в вашем коде есть другая проблема. Если вы попробуете, например, следующий код, он будет работать как положено:
Expression<Func<int, int>> f = x => 10 / x;
Func<int, int> fcompiled = f.Compile();
try {
Console.WriteLine(fcompiled(0));
} catch (DivideByZeroException e) {
Console.WriteLine("Divison by zero");
}
Как примечание, вы, вероятно, должны обработать DivideByZeroException
, используя отдельный catch
(как я делал в моем примере). Это более чистый и рекомендуемый способ отловить различные типы исключений.
Можете ли вы проверить, действительно ли исключение обрабатывается при запуске приложения без отладки (например, путем добавления отладочной печати в блок catch
)? Какое исключение выводится при запуске приложения (в конце концов, ваш код перебрасывает какое-то исключение в любом случае, поэтому вывод может быть неясным).