Per quanto ne so, F # non ha alcun operatore integrato equivalente a C# as
quindi è necessario scrivere un'espressione più complicata. In alternativa al codice utilizzando match
, si potrebbe anche usare if
, perché l'operatore :?
può essere utilizzato allo stesso modo come is
in C#:
let res = if (inputValue :? Type1) then inputValue :?> Type1 else null
Si può naturalmente scrivere una funzione per incapsulare questo comportamento (per la scrittura una semplice funzione generica che prende un Object
e getta al parametro di tipo generico specificato):
let castAs<'T when 'T : null> (o:obj) =
match o with
| :? 'T as res -> res
| _ -> null
Questa implementazione restituisce null
, quindi richiede che il parametro tipo ha null
come un puntello valore (in alternativa, è possibile utilizzare Unchecked.defaultof<'T>
, che equivale a default(T)
in C#). Ora puoi scrivere solo:
let res = castAs<Type1>(inputValue)
fonte
2010-03-02 09:35:32
Questo funziona se il tipo è statico. Qualche idea su cosa fare se il tipo è definito in fase di runtime? Sto cercando un equivalente F # di http://stackoverflow.com/a/19068042/23059. –