【发布时间】:2014-09-09 19:12:51
【问题描述】:
我正在尝试在泛型类 (Xceed.Wpf.Toolkit.NumericUpDown) 上定义扩展方法,但将该泛型限制为 Nullable<_>,但我无法弄清楚语法。我想要的本质是
type NumericUpDown<Nullable<_>> with
member x.getVal() = x.Value.GetValueOrDefault()
member x.setVal v = x.Value <- Nullable v
但这不会编译。我已经尝试了该主题的几种变体,但没有任何效果。有没有办法做到这一点?
【问题讨论】:
-
嗨 - 我很晚才看到你想要一个扩展方法 - 但遗憾的是我不知道你试图扩展的类足以显示代码。我能给出的最好的办法是运行时检查 (
match x with | :? System.Nullable<'a> as nA -> nA.Value.GetValueOrDefault() | _ -> Unchecked.defaultof<'a>) -
这对于 F# 样式的扩展是不可能的。您不能扩展泛型类型的特定情况。
-
@Daniel 仅供参考,见下文。
-
对。使用 .NET 样式的扩展(通过
ExtensionAttribute)可以实现。