法三:字符串转为枚举型

枚举

//定义
type
  Colors = (Red, Yellow, Green, Cyan, Blue, Violet);
  Suit = (Club, Diamond, Heart, Spade);

//举例:
type
  Colors = (Red, Yellow, Green, Cyan, Blue, Violet);
var
  C: Colors;
begin
  C := Red;
  ShowMessage(IntToStr(Ord(C)));  //0
  C := Blue;
  ShowMessage(IntToStr(Ord(C)));  //4

  C := Green;
  ShowMessage(IntToStr(Integer(C)));  //2; 获取元素位置用 Integer 也可以
end;

//举例2:
type
  Tabc = (a=5,b=10,c=a+b);
var
  ta,tb,tc: Tabc;
begin
  ta := a;
  tb := b;
  tc := c;
  ShowMessage(IntToStr(Ord(ta)));  //5
  ShowMessage(IntToStr(Ord(tb)));  //10
  ShowMessage(IntToStr(Ord(tc)));  //15
end;

//获取枚举元素总数:
type
  TMyEnum = (Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday);
var
  m: TMyEnum;
  num: Integer;
begin
  num := 0;
  for m := Low(TMyEnum) to High(TMyEnum) do
    Inc(num);

  ShowMessage(IntToStr(num));  // 7
end;

//返回枚举元素的字符串标识:
uses TypInfo;  //需要uses的单元
type
  TMyEnum = (Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday);

procedure TForm1.Button1Click(Sender: TObject);
var
  str: string;
begin
  str := TypInfo.GetEnumName(TypeInfo(TMyEnum),1);
  ShowMessage(str);  //Tuesday
end;

//获取对象枚举值的字符串表式:
uses TypInfo;  //需要uses的单元

procedure TForm1.FormCreate(Sender: TObject);
var
  str: string;
begin
  str := GetEnumProp(Self, ‘BorderStyle‘);
  ShowMessage(str); { bsSizeable }
end;

这种方法主要用到 RTTI 的特性。该方法的主要思路是,先把所有的备选项声名
            为一个枚举类型的值,那么我们只要把要找的字符串也转换为枚举型,那么就可以
            用 case 语句了。那么通过什么办法把一个字符串转化为枚举型呢?往下看:

// uses TypInfo; // 记得引用这个单元
// type TMyStrSel = (Beijing, Tianjing, Shanghai, Chongqing);
            // 注意,上面这个定义不能放在某个函数内部哦,那样的话,它就没有运行类信息了
// var strSel: TMyStrSel;

str := ‘Chongqing‘;
            strSel := TMyStrSel(GetEnumValue(TypeInfo(TMyStrSel), str));
            case strSel of
            Beijing: ShowMessage(‘First‘);
            Tianjing: ShowMessage(‘Second‘);
            Shanghai: ShowMessage(‘Third‘);
            Chongqing: ShowMessage(‘Forth‘);
            else ShowMessage(‘Other‘);
            end;

稍做解释:GetEnumValue 函数返回一个字符串对应的枚举型的值在某枚举类型
            中的位置(要知道枚举类型是有顺序的,要不怎么叫顺序类型呢:-)),然后通过
            一个强制类型转换将这个值转化为枚举型。于是就实现了把字符串转化为枚举型的
            操作。

可以看到,在 case 语句这一段,我们的使用和理想中的使用方法几乎是一样的!
            毕竟枚举类型可以做到见名知意嘛。的确比用前两种方法看起来直观得多。

当然,这并不是万能的方法,如果你的备选项有一个不符合 Delphi 的变量名命
            名法则(如‘AK-47‘或中文等),则不能将其声明为一个枚举型,于是就不能使用这
            个方法。如果是这样你就只能使用前两种方法了。极端的情况下,至少你还有第一
            种方法可以使用 :-) 但在不少的场合,这种方法还是适用的。

原文地址:https://www.cnblogs.com/bwdblogs/p/10535347.html

时间: 2024-10-10 20:58:16

法三:字符串转为枚举型的相关文章

sqlite 日期型 字符串转为日期型

因为sqlite为弱引用,使用字段前将他强制转为日期型,用datetime.或者最原始的 strftime. SELECT distinct ID from testTable where datetime(availDate) between datetime('2015-01-12 04:00') and datetime('2015-01-13 00:00'); SQLite日期时间函数 SQLite支持以下五个日期时间函数: date(timestring, modifier, modi

python 利用位移法将ip转为number以及将number转为ip

简介: 使用位移法将ip转为number型以及将number型转为ip,使用语言为python2.7 #!/usr/bin/env python # coding:utf-8 def ip2num(ip): ip = [int(x) for x in ip.split('.')] return ip[0] << 24 | ip[1] << 16 | ip[2] << 8 | ip[3] print ip2num('10.101.101.13') #174417165 d

将数字字符串转为数字(java)

1 //讲数字字符串转为数值型(此处不考虑输入字符串的合法性),不允许使用parseInt方法和Character.digit 2 public class ConvertNumstr { 3 public static void main(String[] args) { 4 System.out.print(convertStr2Num("-2015")); 5 } 6 public static int convertStr2Num(String str) { 7 int len

jquery过滤特殊字符及js字符串转为数字

//替换特殊字符 $(this).val($(this).val().replace(/[~'!<>@#$%^&*()-+_=:]/g, "")); 方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有对String类型调用这些方法,这两个函数才能正确运行:对其他类型返回的都是NaN(Not a Number). 一些示

8. String to Integer (atoi) 字符串转为int类型的所有可能情况

8. String to Integer (atoi) 问题: 输入一个字符串,将字符串转为int类型,处理所有可能的输入情况. 可能的输入情况: 1.字符串为空.即"". 2.首先是假设输入的字符串都是数字型的,可含正负号,例如12345,+12548,-15568. 3.字符串中含有非数字的其他字符类型,例如a,-sd,-1286dgg558,000822fg55. 4.字符串首尾含有空格的,例如 -558dg12, 12dc12 . 5.针对转换后的数字越界,有两种情况,一个是超

跟王老师学枚举(三):枚举类API

跟王老师学枚举(三):枚举API 主讲教师:王少华   QQ群号:483773664 一.枚举类API Java中声明的枚举类,均是java.lang.Enum类的孩子,它继承了Enum类的所有方法.常用方法: name():返回此枚举常量的名称 ordinal():返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零 valueof(Class enumClass, String name):返回带指定名称的指定枚举类型的枚举常量 valueof(String name):返回带指定

[Python学习] 专题三.字符串的基础知识

        在Python中最重要的数据类型包括字符串.列表.元组和字典等.该篇主要讲述Python的字符串基础知识. 一.字符串基础         字符串指一有序的字符序列集合,用单引号.双引号.三重(单双均可)引号引起来.如: s1='www.csdn.net'   s2="www.csdn.net"   s3='''aaabbb''' 其中字符串又包括: 1.转义字符串 像C语言中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,pyth

整数装换为字符串intToArray与字符串转为整数 arrayToInt实现

7.  整数装换为字符串itoa的实现 1 char *intToArray(int number, char *str) 2 { 3 if(str == NULL) 4 { 5 return NULL; 6 } 7 char *ret = str; 8 char *left = str; 9 char temp = '\0'; 10 // 负数的处理 11 if(number < 0) 12 { 13 number = -number; 14 *ret++ = '-'; 15 left++;

Java带有运算符的字符串转换为Long型

由于项目需要在配置文件中配置一个刷新时间,但是配置文件中取出来来的数据肯定是字符串,然后要将该带有运算符的字符串转换为Long型.具体代码如下: 配置文件system.properties中: 1 reflash_time = (2*60*1000) Java代码取出该值: 1 public static final String REFLASHTIME = "reflash_time"; 2 3 public String reflashtime; 4 5 reflashtime =