Delphi Variant 判斷是否為空

del88發表於2024-07-25

VarIsEmptyVarIsNull 在 Delphi 中都是用於判斷 Variant 型別變數的函式,但它們之間有著明顯的區別:

VarIsEmpty

VarIsEmpty 函式用於判斷一個 Variant 變數是否未被初始化顯式地被設定為空狀態。當一個 Variant 變數被宣告後尚未被賦予任何值,或者透過某種方式被設定為表示空狀態的值時,VarIsEmpty 會返回 True。然而,需要注意的是,Variant 型別的“空狀態”並不等同於 null 值;它是一個特殊的狀態,表示變數尚未包含有效的資料。

VarIsNull

VarIsNull 函式則用於判斷一個 Variant 變數是否顯式地包含 null。在 Delphi 中,null 是一個特殊的值,用於表示資料缺失或不可用。當一個 Variant 變數被明確地賦值為 null(通常透過 Null 常量)時,VarIsNull 會返回 True。這與 VarIsEmpty 不同,因為 VarIsEmpty 關心的是變數是否處於未初始化或空狀態,而不是它是否包含 null 值。

區別總結

  • 目的不同VarIsEmpty 用於判斷 Variant 是否為空(未初始化或顯式設定為空狀態),而 VarIsNull 用於判斷 Variant 是否包含 null 值。
  • 含義不同:空狀態(由 VarIsEmpty 判斷)表示變數尚未包含有效資料,而 null 值(由 VarIsNull 判斷)表示資料缺失或不可用。
  • 應用場景:在處理 Variant 型別的資料時,根據實際需求選擇合適的函式來判斷變數的狀態。

示例程式碼

var
  v1, v2: Variant;
begin
  v1 := Unassigned; // 未初始化,VarIsEmpty 返回 True
  v2 := Null; // 顯式設定為 null,VarIsNull 返回 True

  if VarIsEmpty(v1) then
    ShowMessage('v1 is empty')
  else
    ShowMessage('v1 is not empty');

  if VarIsNull(v2) then
    ShowMessage('v2 is null')
  else
    ShowMessage('v2 is not null');
end;

在這個例子中,v1 被宣告後未初始化,因此 VarIsEmpty(v1) 返回 True;而 v2 被顯式地設定為 Null,所以 VarIsNull(v2) 返回 True


也可直接與null 比較,因為 null 是一個函式,不可以與nil進行比較 會報錯;

    if node.Values[5] = null then
    begin
       ShowMessage('pnull');
    end else begin
      parentId := node.Values[5];
      ShowMessage('parentId' + parentId.ToString);
    end;

image

image

相關文章