2014-09-09 4 views
1

Я пытаюсь определить метод расширения для общего класса (Xceed.Wpf.Toolkit.NumericUpDown), но ограничить его общим значением Nullable<_>, однако я не могу понять синтаксис. Суть того, что я хочу, этоВложенные общие ограничения в f #

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

но это не скомпилируется. Я пробовал несколько вариантов этой темы, но ничего не работает. Есть ли способ сделать это?

+0

Привет - я видел в последнее время, что вы хотите метод расширения - но к сожалению, я не знаю класс, который вы пытаетесь сделать достаточно, чтобы показать код. Лучшее, что я мог бы дать, это проверка времени выполнения ('match x with |:? System.Nullable <'a> как nA -> nA.Value.GetValueOrDefault() | _ -> Unchecked.defaultof <'a>') – Carsten

+0

Это невозможно с F # -строчные расширения. Вы не можете распространять конкретный случай общего типа. – Daniel

+0

@ Daniel просто fyi см. Ниже. –

ответ

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 
Смежные вопросы