初始值随机

若定义一个枚举,他初始化是随机的,并不是第一个元素如:

image

所以若一个类包含了枚举类型,一定要给其赋值,否则就会乱套;

枚举不能为nil

image

枚举的零值 是随机 数字,值类型,不是对象类型;

定义时指定数字值

//在这个例子中,`cRed` 的值是 1,`cGreen` 的值是 2,`cBlue` 的值是 4。注意,这些值不必是连续的
TColor2 = (cRed = 1, cGreen = 2, cBlue = 4); 

image

枚举与字符串互转

procedure TForm2.Button3Click(Sender: TObject);
var
  od: Integer;
  s: string;
  cl: TColor;
begin
  //获取元素的序号
  cl := Red;
  memo1.Lines.Add(IntToStr(Ord(cl)));  //0
  cl := Blue;
  memo1.Lines.Add(IntToStr(Ord(cl)));  //3

  //枚举转字符串方式一(常用简单), uses System.TypInfo
  memo1.Lines.Add(GetEnumName(TypeInfo(TColor), 2));//Green 知道枚举序号,一般不会使用这个
  memo1.Lines.Add(GetEnumName(TypeInfo(TColor), Ord(Blue)));//Blue 一般使用这个

  //枚举转字符串方式二(RTTI), uses System.Rtti
  memo1.Lines.Add(TValue.From<TColor>(Blue).ToString);//Blue

  //字符串转枚举,uses System.TypInfo
  s := 'Blue';
  od := GetEnumValue(TypeInfo(TColor), s); //3
  memo1.Lines.Add(od.ToString);
  cl := TColor(od);
  case cl of
    Red: memo1.Lines.Add('Red');
    Yellow: memo1.Lines.Add('Yellow');
    Green: memo1.Lines.Add('Green');
    Blue: memo1.Lines.Add('Blue');  //Blue
  end;
  //即字符串转枚举是: EColors(GetEnumValue(TypeInfo(EColors), s));
end;

image

枚举遍历

for var enum := Low(TModelType) to High(TModelType) do
begin
  memo2.Lines.Add(GetEnumName(TypeInfo(TModelType), Ord(enum))); //枚举字符串
end;

image

posted on 2024-07-29 12:26  del88  阅读(44)  评论(0编辑  收藏  举报