Generics F中的严格泛型枚举转换#

Generics F中的严格泛型枚举转换#,generics,enums,f#,inline,Generics,Enums,F#,Inline,我想用signatureint->'TEnum编写一个函数,如果目标枚举不包含输入值,它将抛出一个异常。这是我的第一次尝试: let parseEnum<'TEnum when 'TEnum : enum<int>> (value : int) : 'TEnum = let enumType = typeof<'TEnum> if not <| Enum.IsDefined (enumType, value) then r

我想用signature
int->'TEnum
编写一个函数,如果目标枚举不包含输入值,它将抛出一个异常。这是我的第一次尝试:

let parseEnum<'TEnum when 'TEnum : enum<int>> (value : int) : 'TEnum =
    let enumType = typeof<'TEnum>
    if not <| Enum.IsDefined (enumType, value) then
        raise <| ArgumentException (sprintf "Invalid value of %A: %d" enumType value)

    enum value
但编译器仍然在
typeof
行中抱怨:“错误FS3156:意外的标记'>'或不完整的表达式”


我做错了什么?如何编写此函数?

您只需要在“帽子”符号
ˆ
之间留出一个空格,如下所示:/p 预删除enumType=typeof<^TEnum> 事实上,你不需要帽子,你可以写:

open System
let inline parseEnum2 value : 'TEnum =
    let enumType = typeof<'TEnum>
    if not <| Enum.IsDefined (enumType, value) then
        raise <| ArgumentException (sprintf "Invalid value of %A: %d" enumType value)

    enum value
开放系统
让内联parseEnum2值:'TEnum=
让enumType=typeof
let enumType = typeof< ^TEnum>
open System
let inline parseEnum2 value : 'TEnum =
    let enumType = typeof<'TEnum>
    if not <| Enum.IsDefined (enumType, value) then
        raise <| ArgumentException (sprintf "Invalid value of %A: %d" enumType value)

    enum value