首页 > 其他分享 >Delphi Variant 判断是否为空

Delphi Variant 判断是否为空

时间:2024-07-25 20:42:20浏览次数:9  
标签:VarIsEmpty Delphi Variant v1 v2 为空 VarIsNull null

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

标签:VarIsEmpty,Delphi,Variant,v1,v2,为空,VarIsNull,null
From: https://www.cnblogs.com/del88/p/18324091

相关文章

  • ImageEn v10.2.0 for Delphi 5-12 Crack
    ImageEnv10.2.0forDelphi5-12CrackKeyFeaturesofImageEn:Extensivecomponentsuiteforimageediting,display,andanalysisCompatiblewithDelphiandC++Builder5-7,2005-2010,XE-XE8,10,11,12,and.NET2.0ornewerSup......
  • delphi7怎么安装raize
            RaizeComponents是一个强大的组件库,用于为Delphi开发者创建高级界面。安装RaizeComponents的步骤通常如下:        1.下载RaizeComponents库。你可以从官方网站或其他可信来源获取最新版本的RaizeComponents。解压下载的文件到一个目录。   ......
  • 解决spring后端传前端数值为空的问题
    问题:在开发当中,由于我的数据传输从DTO在某些场景下,其中的部分字段并不需求进行值的传递,但在其他功能当中需要;(比如开发题目模块时,查询题目采用同一接口,根据题目id不同,后台判断其为多选还是单选进行回传给dto给前端)。导致出现了如下情况的诸多null值,而这些是没有作用但又不可删除的......
  • Delphi皮肤控件AlphaControls去NAG提示
    国外知名皮肤控件AlphaControls,一些好看的皮肤会弹出对话框....用查找句柄的方法去发消息关闭对话框,都不得行...,以为是屏敝了消息,自定义消息也失效。后面用修改内存地址指令的方法,就可以有效的去掉NAG提示functionFindPattern(ProcessHandle:THandle;StartAddr,EndAddr:D......
  • 使用.loc切片时Series为空
    我想获取Q1到Q9之间的项目。我使用.loc对系列对象进行切片:s.loc['Q1':'Q2']但是它返回一个空系列。Series([],dtype:object)通常,我应该返回['Q1','Q2','Q3','Q4','Q5','Q6','Q7'......
  • Delphi原生JSON框架(二)TJsonArray
    前面写了如何快速读取一个JSON串,但只是针对简单的类型,如果JSON串中有数组该怎么办呢?一、例子代码先看下面的代码,读取一个学生的各科成绩。procedureTForm6.Button1Click(Sender:TObject);varjsonstr:string;jv:TJSONValue;js:TJSONString;ja:TJSONArray;jo......
  • Delphi原生JSON框架(一) TJsonValue
    Delphi自带了json支持,引用System.json,你就可以处理json,读写json格式的内容都是被支持的。发展了几个版本,无论性能及稳定性都已经成熟,我不喜欢引用更多的三方到项目中,所以,对于Delphi处理json来说,自带的是我的首选。目前,DelphiJson的实现,支持json所有的类型:TJSONObjectTJSONArra......
  • 避免函数形参为空指针
    展示一个函数形参为空指针的隐患:执行第32行代码时,相当于执行double*pdPoint=pdTemp;,由于pdTemp=NULL,所以pdPoint=NULL。在然后 voidPointer(double*pdPoint,intiDim)函数中对pdPoint赋了一块动态内存,此时 pdPoint!=NULL,但是 pdPoint和pdTemp只是赋值......
  • bluz glib编程 --- GVariant Format Strings 介绍
    GVariantFormatStrings类型字符串实例分析(sa{sv}as)外层是元组类型,内含三个成员,分别是字符串s字典类型数组a{sv},字符串作为key,variant作为value字符串类型数组as(i@ii)外层是元组类型,内含三个成员,分别是gint类型数字类型ivariant类型@i,对应数字......
  • delphi dev cxgrid 列绑定Richedti 支持过滤
    默认是不支持过滤的,这里需要改到内部的一些源码文件。先说思路:1.要让列支持过滤需要重载richedit类的 GetSupportedOperations,typeTcxRichEditProperties=class(cxRichEdit.TcxRichEditProperties)publicfunctionGetSupportedOperations:TcxEditSupportedOpe......