Skip to content

Instantly share code, notes, and snippets.

@LarsFosdal
Created February 18, 2019 11:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LarsFosdal/b7bea4ccf1ce4934659feea0418080b3 to your computer and use it in GitHub Desktop.
Save LarsFosdal/b7bea4ccf1ce4934659feea0418080b3 to your computer and use it in GitHub Desktop.
Delphi pitfalls: Enumerated types and for loops
program EnumArrayvsEnumSet;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
type
TEnum = (plough, foo, bar, wtf);
procedure Output(const aEnum: TEnum);
begin
case aEnum of
wtf: Writeln('wtf');
plough: Writeln('plough');
bar: Writeln('bar');
foo: Writeln('foo');
else Writeln('Missed one!');
end;
end;
procedure TestEnumSet;
var
enum: TEnum;
begin
for enum in [wtf, plough, bar, foo]
do Output(enum);
end;
procedure TestEnumArray;
var
enum: TEnum;
enumArray: TArray<TEnum>;
begin
enumArray := [wtf, plough, bar, foo];
for enum in enumArray
do Output(enum);
end;
begin
try
try
Writeln('Declared: TEnum = (plough, foo, bar, wtf)');
Writeln('Test order: [wtf, plough, bar, foo]');
Writeln;
Writeln('Looping an Enum Set');
TestEnumSet;
Writeln;
Writeln('Looping an Enum Array');
TestEnumArray;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
finally
Writeln;
Write('Press Enter:');
Readln;
end;
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment