f#中的嵌套通用约束

时间:2014-09-09 19:12:51

标签: generics f#

我正在尝试在泛型类(Xceed.Wpf.Toolkit.NumericUpDown)上定义扩展方法,但是将该泛型限制为Nullable<_>,但我无法弄清楚语法。我想要的本质是

type NumericUpDown<Nullable<_>> with
  member x.getVal() = x.Value.GetValueOrDefault()
  member x.setVal v = x.Value <- Nullable v

但不会编译。我在这个主题上尝试了几种变体,但没有任何效果。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:3)

我不知道你要扩展的课程但是从F#3.1开始你应该能够写下并使用它:

open System.Runtime.CompilerServices

[<Extension>]
type NumericUpDownExtensions () =
  [<Extension>]
  static member getVal(x: NumericUpDown<Nullable<'a>>) = x.Value.GetValueOrDefault()
  [<Extension>]
  static member setVal(x: NumericUpDown<Nullable<'a>>, v) = x.Value <- Nullable v