Ваш первый шаблон на самом деле не соответствует typeof<string>
. Он связывает propType
с новым значением t
, затеняя предыдущее t
, равное typeof<string>
.
Поскольку typeof<string>
не является литералом, второй шаблон также не работает (хотя в вашем примере это избыточный шаблон). Вы должны использовать when
охрану следующим образом:
match propType with
| t when t = typeof<string> -> elem.GetValueAsString() :> obj
| t -> elem.GetValueAsString() :> obj