文字列から列挙型への汎用変換演算子を定義しようとしていますが、次のように使用したいと思います。
let day = asEnum<DayOfWeek>("Monday")
しかし、この実装では:
let asEnum<'a, 'b when 'a: (new : unit -> 'a) and 'a : struct and 'a :> ValueType and 'a : enum<'b>> text =
match Enum.TryParse<'a>(text) with
| true, value -> Some value
| false, _ -> None
私はこのようにしか使えません:
let day = asEnum<DayOfWeek,_>("Monday")
またはこれ:
let day:DayOfWeek option = asEnum("Monday")
型制約から完全に省略すると'a : enum<'b>
、好きなように使用できますが、誰かが型を指定しないと、デフォルトで になりますint
。これは本当に好きではありません。コンパイルすることをお勧めします制約を指定したときのような時間エラー
1 つの型パラメーターを指定するだけで、もう 1 つの型パラメーターを推論させるトリックがあるのではないでしょうか? 何か案は?