【发布时间】:2013-02-27 14:50:06
【问题描述】:
我正在尝试定义一个从字符串到枚举的通用转换运算符,我想像这样使用它:
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,我真的不喜欢,我希望它像我指定约束时一样给出编译时错误
也许只指定一个类型参数并推断另一个类型参数有什么技巧?有什么想法吗?
【问题讨论】: