初始值隨機
若定義一個枚舉,他初始化是隨機的,并不是第一個元素如:

所以若一個類包含了枚舉類型,一定要給其賦值,否則就會亂套;
枚舉不能為nil

枚舉的零值 是隨機 數字,值類型,不是對象類型;
定義時指定數字值
//在這個例子中,`cRed` 的值是 1,`cGreen` 的值是 2,`cBlue` 的值是 4。注意,這些值不必是連續(xù)的
TColor2 = (cRed = 1, cGreen = 2, cBlue = 4);

枚舉與字符串互轉
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;

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

本文來自博客園,作者:del88,轉載請注明原文鏈接:http://www.rzrgm.cn/del88/p/18329842
浙公網安備 33010602011771號