代码之家  ›  专栏  ›  技术社区  ›  stillearningsomething

转换为文本运行时提供的类型

  •  2
  • stillearningsomething  · 技术社区  · 7 年前

    换句话说,如果我想要一个完全泛型的函数,我如何确保在数值类型之间进行编译/运行时转换。

    例如:

    let f x = x + 1 // int -> int
    

    自动假定 int 因为 1 .

    我目前的做法是:

    let gettype (x:'T) = typeof<'T>  // 'T -> Type
    let one x = Convert.ChangeType (1, (gettype x))  // 'a -> obj
    let f x = x + one(x) // obj -> obj
    

    但这不起作用 + 没有为定义 obj s公司

    1 回复  |  直到 7 年前
        1
  •  6
  •   Fyodor Soikin    7 年前

    如果您想要一个完全泛型的函数,在参数中添加一个,我建议您使用 LanguagePrimitives.GenericOne :

    let inline f x = x + LanguagePrimitives.GenericOne
    

    注意,您还需要内联函数,因为否则运算符 (+) 不能是普通的。