Możesz dostać się tam z pomocnikiem zapisu, który jest dostępny dla typów wartości od XE3. Na przykład:
{$APPTYPE CONSOLE}
uses
System.SysUtils, System.TypInfo;
type
TMyEnum = (enumValue1, enumValue2);
TMyEnumHelper = record helper for TMyEnum
public
function ToString: string;
end;
function TMyEnumHelper.ToString: string;
begin
Result := GetEnumName(TypeInfo(TMyEnum), ord(Self));
end;
begin
Writeln(enumValue1.ToString);
Writeln(enumValue2.ToString);
end.
Ten program wyświetla następujący:
enumValue1
enumValue2
Oczywiście może wolisz zrobić to tak:
{$APPTYPE CONSOLE}
uses
System.SysUtils, System.TypInfo;
type
TMyEnum = (enumValue1, enumValue2);
TMyEnumHelper = record helper for TMyEnum
private
const
EnumNames: array [TMyEnum] of string = ('Friendly name 1', 'Friendly name 2');
public
function ToString: string;
end;
function TMyEnumHelper.ToString: string;
begin
Result := EnumNames[Self];
end;
begin
Writeln(enumValue1.ToString);
Writeln(enumValue2.ToString);
end.
Wyjście tutaj jest:
Friendly name 1
Friendly name 2
To przypuszczalnie pozwala ci poradzić sobie z faktem, że wyliczone typy Delphi nie obsługują tekstowego nazewnictwa dostępnego w Javie.
W innej metodzie konstruktor HTTPHeaderKey
nie może być obsługiwany z typem wyliczeniowym. Powodem jest to, że wymaga stanu, a jedynym stanem dla wyliczonego typu Delphi jest sama wyliczona wartość typu. Nie można przeszukiwać dodatkowej zmiennej instancji, tak jak dzieje się to w kodzie Java.
Nie sądzę, aby podjęto próbę dosłownego tłumaczenia z wyliczonym typem. Proponuję, abyś przetłumaczył używając rekordu lub klasy i zbudował równoważną funkcjonalność używając dostępnych konstruktów językowych Delphi.
Wow. Nie wiedziałem, że możesz używać pomocników rekordów na enums +1 –
@markus_ja 20 minut temu Nie wiedziałem, że albo –
dzięki za odpowiedź, mam to :) –