Код, сгенерированный генератором CodeDOM, странный, но в основном это корректный код F #, который компилируется. Как указывает kvb, определение конструктора является действительным. Было бы лучше, если бы провайдер CodeDOM генерировал код с использованием неявного синтаксиса, но это не сработало бы, если бы у вас было несколько конструкторов.
Что касается исключений, они используются для эмуляции императивной конструкции return
(как в C #). Например, вы не можете напрямую написать следующее в F #:
for(int i = 0; i < 10; i++)
if (i == 5) return;
Таким образом, генератор CodeDOM использует исключение для эмуляции return
и try .. with
для его обработки.
Обычный стиль кодирования в F # просто немного отличается от C # / VB, а структуры данных CodeDOM были разработаны в основном для C # / VB. Если вы хотите сгенерировать хороший код F #, лучше написать собственный генератор кода. Кроме того, кто-то может создать провайдера F # CodeDOM, который не будет поддерживать все функции, но будет генерировать красивый код.