[gelöst] Best Practice für Set Of

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

[gelöst] Best Practice für Set Of

Beitrag von Michl »

Hallo Allerseits,

ich habe mal eine Frage für folgendes Problem:

Ich definiere mir im Prinzip ein "Set Of" doppelt, damit ich mir die übergebenen Parameter als String (notwendig für Log) ausgeben lassen kann. Gibt es eine bessere Lösung?:

Code: Alles auswählen

const
  tNone = 0;
  tTry  = 1;
  tDo   = 2;
 
  TestFlagStr: Array[tNone..tDo] of ShortString = (
    'None',
    'Try',
    'Do');
 
type
  TTestFlag = (
    tfNone,
    tfTry,
    tfDo);
  TMyFlags = Set of TTestFlag;
 
...
 
procedure TForm1.MyProc(aFlag: TMyFlags);
var
  Flag: TTestFlag;
  s: String;
begin
  s:='';
  for Flag in aFlag do case
    Flag of
      tfNone: s:=s + TestFlagStr[tNone] + ', ';
      tfTry:  s:=s + TestFlagStr[tTry]  + ', ';
      tfDo:   s:=s + TestFlagStr[tDo]   + ', ';
    end;
  Caption:=s;
end;                         
Zuletzt geändert von Michl am Mi 29. Okt 2014, 11:54, insgesamt 2-mal geändert.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

wp_xyz
Beiträge: 5174
Registriert: Fr 8. Apr 2011, 09:01

Re: Best Practice für Set Of

Beitrag von wp_xyz »

Ich definiere mir im Prinzip ein "Set Of" doppelt, damit ich mir die übergebenen Parameter als String (notwendig für Log) ausgeben lassen kann. Gibt es eine bessere Lösung?:
Natürlich: GetEnumName() aus TypInfo

Code: Alles auswählen

 
uses
  TypInfo;
 
function FlagToStr(AFlag: TTestFlag): String;
begin
  Result :=  GetEnumName(TypeInfo(TTestFlag), ord(AFlag));
end;
 

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Best Practice für Set Of

Beitrag von Michl »

Funktioniert! Ist nur unwesentlich langsamer, als mein bisheriges Vorgehen. Werde ich entsprechend umsetzen.

Danke!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Antworten