Насколько я знаю, в F # нет встроенного оператора, эквивалентного C # as
, поэтому вам нужно написать более сложное выражение.В качестве альтернативы вашему коду, использующему match
, вы также можете использовать if
, поскольку оператор :?
можно использовать так же, как is
в C #:
let res = if (inputValue :? Type1) then inputValue :?> Type1 else null
Можно, конечнонаписать функцию для инкапсуляции этого поведения (написав простую универсальную функцию, которая принимает Object
и преобразует ее в указанный параметр универсального типа):
let castAs<'T when 'T : null> (o:obj) =
match o with
| :? 'T as res -> res
| _ -> null
Эта реализация возвращает null
, поэтому она требуетчто параметр типа имеет null
в качестве правильного значения (в качестве альтернативы вы можете использовать Unchecked.defaultof<'T>
, что эквивалентно default(T)
в C #).Теперь вы можете написать просто:
let res = castAs<Type1>(inputValue)