Delphi 解决字符串型的枚举值设置和读取的方法

需求:

对于枚举类型字段,一般数据库中存储的是整型值,但在业务处理中使用整型值可读性不强,且显示对应中文描述不方便。

例如订单状态的枚举值为:0:未支付   1:支付中    2:已支付    3:已退款,现在有一个需求需要在业务中判断订单的状态,处理相应的逻辑,并将订单状态对应的中文描述提示给用户。

那么普通的处理方式可能如下:

function HandleOrderStaus(orderStatus: integer): string;
begincase orderStatus of0: begin//...此处处理未支付的逻辑result := '未支付';end;1: begin//...此处处理支付中的逻辑result := '支付中';end;2: begin//...此处处理已支付的逻辑result := '已支付';end;3: begin//...此处处理已退款的逻辑result := '已退款';end;default:result := '未知的支付状态';end;
end;

此方法的缺点:在代码中用0、1、2、3表示订单状态,可读性不强,且对应中文描述不方便管理

解决方案:

一、枚举类型+常量数组

定义订单状态的枚举类型:

type//订单状态   0:未支付   1:支付中    2:已支付    3:已退款TOrderStatus = (osUnpaid=0, osPaying=1, osPaid=2, osRefund=3);

定义常量数组表示订单状态对应的中文描述,数组的下标用枚举类型:

const//订单状态中文描述常量数组ARR_ORDERSTATUS: array[TOrderStatus] of string = ('未支付', '支付中', '已支付', '已退款');

用枚举值进行业务逻辑处理:

function HandleOrderStaus(status: Integer): string;
begincase TOrderStatus(status) ofosUnpaid: begin//...此处处理未支付的逻辑result := ARR_ORDERSTATUS[osUnpaid];end;osPaying: begin//...此处处理支付中的逻辑result := ARR_ORDERSTATUS[osPaying];end;osPaid: begin//...此处处理已支付的逻辑result := ARR_ORDERSTATUS[osPaid];end;osRefund: begin//...此处处理已退款的逻辑result := ARR_ORDERSTATUS[osRefund];end;default:result := '未知的支付状态';end;
end;

遍历显示所有订单状态中文描述:

function ShowAllOrderStatus: string;
varval: string;
beginResult := '';//遍历数组,返回所有订单状态中文描述for val in ARR_ORDERSTATUS dobeginResult := Result + ' -- ' + val;end;
end;

枚举值和整形相互转换:

//将枚举值转为整形
Ord(osPaid)
//将整形转为对应枚举值
TOrderStatus(0)
二、枚举类型+字典类型

 定义订单状态的枚举类型:

type//订单状态   0:未支付   1:支付中    2:已支付    3:已退款TOrderStatus = (osUnpaid=0, osPaying=1, osPaid=2, osRefund=3);

初始化订单状态字典、遍历:

procedure ShowAllOrderStatus;
varval: string;orderStatusDict: TDictionary<TOrderStatus, string>;   //订单状态字典pair: TPair<TOrderStatus, string>;                    //用于存储临时键值对的变量
beginorderStatusDict := TDictionary<TOrderStatus, string>.Create;try//初始化字典orderStatusDict.Add(osUnpaid, '未支付');orderStatusDict.Add(osPaying, '支付中');orderStatusDict.Add(osPaid, '已支付');orderStatusDict.Add(osRefund, '已退款');//使用 pair 遍历字典,显示到 TMemo 控件(mmoOrderStatus)for pair in orderStatusDict dobeginmmoOrderStatus.Lines.Add(IntToStr(Ord(pair.Key)) + ': ' + pair.Value);end;//仅遍历字典的 values 值for val in orderStatusDict.Values dobeginmmoOrderStatus.Lines.Add(val);end;//显示“未支付”mmoOrderStatus.Lines.Add(orderStatusDict[osUnpaid]);finallyorderStatusDict.Free;end;
end;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/8828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

知识付费系统怎么搭建_轻松拥有知识付费平台

在信息爆炸的时代&#xff0c;知识的获取已不再局限于传统的课堂和书籍。随着科技的进步和互联网的普及&#xff0c;我们迎来了一个全新的知识获取方式——知识付费。今天&#xff0c;就让我们一起探讨如何搭建一个专属于您的知识付费系统&#xff0c;开启智慧的大门&#xff0…

常见C语言基础说明二:位运算问题

一. 简介 前面一篇文章学习了 常见的 C语言基础题&#xff0c;文章如下&#xff1a; 常见C语言基础题说明一-CSDN博客 本文继续上一篇C语言基础题的学习。 二. C语言中 -> 位运算问题 1. 数据在计算机中的存储方式 当前的计算机系统使用的基本上是二进制系统&#…

C++中Using关键词的三种应用

引入单个名称 将某个单独名字引入到当前域中。不再需要使用作用域限定符&#xff1a;&#xff1a; 例如&#xff1a; using std::string; string s “hello,world”; using声明可以改变派生类对父类成员的访问控制。 例如&#xff1a; class Base{ protected: int n1;…

楼宇自控远程I/O革新BACnet/IP模块在暖通空调系统

在现代智能建筑的浪潮中&#xff0c;BACnet/IP分布式远程I/O控制器正逐步成为暖通空调&#xff08;HAVC&#xff09;系统升级转型的得力助手。本文将以某大型商业综合体为例&#xff0c;揭示BACnet/IP I/O模块如何在复杂多变的环境中发挥其独特优势&#xff0c;实现HVAC系统的智…

libcity笔记:添加新模型(以RNN.py为例)

创建的新模型应该继承AbstractModel或AbstractTrafficStateModel 交通状态预测任务——>继承 AbstractTrafficStateModel类轨迹位置预测任务——>继承AbstractModel类 1 AbstractTrafficStateModel 2 RNN 2.1 构造函数 2.2 predict 2.3 calculate_loss

互联网洗鞋工厂实现新时代下的家庭洗护服务;

互联网洗鞋工厂实现新时代下的家庭洗护服务; 拽牛科技洗护系统以智慧城市系统为依托&#xff0c;洗鞋工厂为中心&#xff0c;利用互联网&#xff0b;社区服务商模式&#xff0c;实现了新时代下的家庭洗护服务&#xff0c; 将客户&#xfe63;&#xfe63;社区服务商&#xfe63…

ansible内置主机变量及魔法变量

目录 概述实践代码执行效果 概述 简单实用版本 实践 代码 --- - name: Get IP Addresshosts: allgather_facts: notasks:- name: Get IP Addressansible.builtin.setup:register: host_ip- name: Print IP Addressansible.builtin.debug:msg: "The IP Address of {{ a…

基于Spring Boot框架实现大学生选课管理系统

文章目录 源代码下载地址项目介绍项目功能界面预览 项目备注源代码下载地址 源代码下载地址 点击这里下载源码 项目介绍 项目功能 教务处管理 开课、开班审批&#xff0c;排课处理&#xff0c;班级操作&#xff0c;选课时间段管理** 使用了sql解决了开课开班的时间段的冲突…

水电抄表方案是什么?

1.概述&#xff1a;水电抄表方案的重要性 水电抄表方案是现代城市管理中不可或缺的一部分&#xff0c;它涉及到了能源管理、费用结算和公共服务等多个领域。传统的抄表方式需要工作人员上门服务&#xff0c;费时费力且效率低下。随着科技的发展&#xff0c;智能化的水电抄表方…

【高阶数据结构】图--邻接矩阵、邻接表、BFS、DFS、Kruskal、Prime

图--邻接矩阵、邻接表、BFS、DFS、Kruskal、Prime 一、图的概述1、概述&#xff08;纯理论部分&#xff09;2、邻接矩阵&#xff08;实现一个添加边的图&#xff09;&#xff08;1&#xff09;思路介绍&#xff08;2&#xff09;代码部分&#xff08;3&#xff09;测试部分 3、…

类和对象test

一、初始化列表 引言&#xff1a; 虽然上述构造函数调用之后&#xff0c;对象中已经有了一个初始值&#xff0c;但是不能将其称为对对象中成员变量 的初始化&#xff0c;构造函数体中的语句只能将其称为赋初值&#xff0c;而不能称作初始化。因为初始化只能初始 化一次&#x…

【华为】AC直连二层组网隧道转发实验配置

【华为】AC直连二层组网隧道转发实验配置 实验需求拓扑配置AC数据规划表 AC的配置顺序AC1基本配置(二层通信)AP上线VAP组关联--WLAN业务流量 LSW1AR1STA获取AP的业务流量 配置文档 实验需求 AC组网方式&#xff1a;直连二层组网。 业务数据转发方式&#xff1a;隧道转发。 DHC…

SpringCloudAlibaba:3.2dubbo的高级特性

启动时检查 简介 Dubbo在启动时检查依赖得服务是否可用&#xff0c;不可用时会抛出异常&#xff0c;阻止Spring初始化完成&#xff0c;以便上线时&#xff0c;能及早发现问题 建议 如果你的Spring容器是懒加载的&#xff0c;或者通过API编程延迟引用服务&#xff0c;请关闭ch…

SpringBoot 使用 @RequiredArgsConstructor(onConstructor_ = @Autowired) 报错解决

若使用 RequiredArgsConstructor(onConstructor_ Autowired) 启动报错&#xff0c;或者爆红可以使用以下方法解决 1. 安装或启用 Lombok插件 2. 检查 Lombok 版本 3. 若 onConstructor_ 爆红&#xff0c; 可能是IDEA中文软件包冲突 4. 若以上还是不行&#xff0c;可以添加…

Django和Python版本兼容表

记录一下Python和Django版本的兼容性对照表&#xff0c;如果还在维护老的项目可以作参考&#xff1a; Django 版本Python 版本备注5.1 3.10, 3.11, 3.125.0 3.10, 3.11, 3.12最低要求Python3.104.23.8, 3.9, 3.10, 3.11, 3.12 (从4.2.8开始)4.1 3.8, 3.9, 3.10, 3.11 (…

模方已经安装了3dmax,也装了插件,为什么一直显示没有插件?

答&#xff1a;主要是联动2018版本&#xff0c;然后插件在模方安装时候&#xff0c;会有选项自动安装联动插件&#xff0c;SketchUp&#xff08;建议版本为2019&#xff09;&#xff0c;3dsMax&#xff08;建议版本为2018&#xff09; 模方是一款针对实景三维模型的冗余碎片、…

SpringBoot框架如何接入RocketMQ?

目录 一、SpringBoot框架介绍 二、RocketMQ介绍 三、RocketMQ的应用场景 四、SpringBoot框架如何接入RocketMQ 一、SpringBoot框架介绍 Spring Boot是一个开源的Java框架,它基于Spring框架,旨在简化Java应用程序的开发。Spring Boot通过自动化配置和约定优于配置的原则,大…

AVFilterLink的channels设置

下面这样一条命令 ffmpeg -i /Users/user/video/mp4/output.wav -ac 1 /Users/user/video/mp4/output1.wav 我们会形成下面这样的图 图1 现在有个问题link4的channel怎么设置的&#xff1f; static int pick_format(AVFilterLink *link, AVFilterLink *ref){link->cha…

猫头虎分享已解决Bug || Node.js安装失败Error: unable to connect to https://nodejs.org/猫头虎

猫头虎分享已解决Bug || Node.js安装失败Error: unable to connect to https://nodejs.org/猫头虎 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — …

数据结构(二)关于空间的使用

数据结构&#xff08;二&#xff09;关于空间的使用 要点&#xff1a;解决问题的效率跟空间的利用效率有关 思考&#xff1a;如何空间的利用效率 01 如何空间的利用效率 参考&#xff1a;递归导致的栈溢出 Exception in thread "main" java.lang.StackOverflowE…