如何为Delphi.net Nullable分配“null”

时间:2011-10-18 14:03:37

标签: nullable delphi.net

如何为Delphi.net Nullable分配null?我有一个先前包含值的字段,我需要将其值清除为null。

depth : Nullable<Double>;

Procedure ClearDepth;
begin 
    depth := Nil;
end;

以上创建错误Error: E2010 Incompatible types : 'Nullable<System.Double>' and 'Pointer'。使用Null代替Nil会导致Variant代替Pointer时出现同样的错误。我想知道我是否应该使用特殊的构造函数来生成null null,但我在文档中看不到一个?

以下有效,但似乎不是一个很好的解决方案,任何人都可以提出更好的方法吗?

Procedure ClearDepth;
var
    uninitialisedValue : Nullable<Double>;
begin 
    depth := uninitialisedValue;
end;

2 个答案:

答案 0 :(得分:3)

您需要以下语法:

depth := Default(Nullable<Double>);

答案 1 :(得分:1)

Nullable<T>类型是struct。这意味着它有一个公共无参数构造函数。在这种类型的情况下,这是代表null的值。在C#中,您将使用:

new Nullable<Double>()

在C#中获得相同值的另一种方法是

default(Nullable<Double>)

在这两种情况下,我都不知道Delphi的语法。在第二种情况下,我不知道这样的事情是否可以在那里表现出来。

编辑:显然,您可以在Delphi中使用第二个版本,但不能与第一个版本相同。这对我来说非常令人惊讶。