次のコードがコンパイルされないのはなぜですか?これはコンパイラのバグか言語機能ですか?最善の回避策は何ですか?ジェネリックの問題
type A() as this =
let a = this.GetTypedObject<int>() // a
let b = this.GetTypedObject<string>() // b
member this.GetTypedObject<'T>() =
Unchecked.defaultof<'T>
Unchecked.defaultof <「T>は単に例のために使用される、任意の関数またはコンストラクタコールを代わりに使用することができます。
コンパイラでは、コードは線分(a)で一般的でなくなり、線分(b)をコンパイルすることを拒否します。 私はロシア語で書いてあるので、コンパイラの正確なメッセージを伝えることはできません:)。
GetTypedObject()をレットバインディングに変換して削除すると、< 'T>は別のコンパイラの警告で終わってしまいます。私が見つけた唯一のwokaroundは、GetTypedObject < 'T>()を基本クラスに移動して公開することです。事前のおかげで...
ありがとうございます!私の魅力のように働いた。 – Alexander
そして優れた説明! – Alexander