2017-01-06 14 views
2

私はいくつかのC#ライブラリといくつかのインタフェースを行い、オブジェクトのキャストを行う必要があります。ダウンキャストのタイプを引数として渡すことで解決できるコードの複製がいくつかあります。F#は関数の引数としてダウンキャスト型を提供します

// transform exceptions into Option type 
let tryFn fn = 
    try Some(fn()) with ex -> None 

let tryCastString (o: obj) = tryFn (fun() -> o :?> string) 
let tryCastUInt64 (o: obj) = tryFn (fun() -> o :?> uint64) 

// I would like to do something like the following 
let tryCast (o: obj) (t: type) = tryFn (fun() -> o :?> t) 

答えて

8

型引数を使用します。

let tryCast<'R> (o: obj) = tryFn (fun() -> o :?> 'R) 

これは、型推論は、そのタイプは、多くの場合、あなたのために推測され得ることができ、追加の利点があり、ここでは簡単な例です:

let x: int64 option = tryCast "4" 

ここでは、xoption<int64>であることがコンパイラに認識されているため、型を指定する必要はありません。