如何在F#中使用Nullable抽象类型?

时间:2011-10-24 11:23:36

标签: f# nullable

以下是我要做的事情:

and [<AbstractClass>] Figure() =
    let mutable name : string = ""
    let mutable color : ColorType = WHITE   
    abstract member Name : string       
    member F.Color
        with get()  = color
        and set v   = color <- v
    abstract member motion : Dashboard -> SPosition -> ColorType -> list<SPosition * CellDashboard * bool>;
    override F.ToString() = name
and CellDashboard(addingFigure : Nullable<Figure>) as C =
    let mutable attacked    : bool      = false;
    let mutable cleaned     : bool      = false;
    let mutable _CellState  : Nullable<Figure> = Nullable<Figure>(addingFigure);
麻烦的是:

Error   1   A generic construct requires that the type 'Figure' be non-abstract
为什么?我怎样才能避免这个错误?

1 个答案:

答案 0 :(得分:5)

Nullable<T>类型只能用于.NET值类型。错误消息实质上意味着编译器无法检查约束是否成立(因为类型是抽象的)。

如果您想在F#中表示缺失值,最好使用option<T>代替。

如果您正在编写将在C#中使用的代码,那么最好避免暴露F#特定类型(例如option<T>),并且可以使用AllowNullLiteral标记类型,这使得可以将null作为类型的值传递(但null是邪恶的,所以除非必要,否则不应该这样做!)