gpt4 book ai didi

delphi - 记录助手和类方法

转载 作者:行者123 更新时间:2023-12-03 19:47:35 25 4
gpt4 key购买 nike

TTransactionType = (ttNone, ttCash, ttCheck, ttDebit);

TTransactionTypeHelper = record helper for TTransactionType
public
class function ToTransactionType(TranTypeDescription : string) : TTransactionType;
function ToString(): string;
end;

function TTransactionTypeHelper.ToString: string;
begin
case Self of
ttCash:
Result := 'Cash';
ttCheck:
Result := 'Check';
ttDebit:
Result := 'Debit'
else
Result := '';
end;
end;

class function TTransactionTypeHelper.ToTransactionType(
TranTypeDescription: string): TTransactionType;
begin
if (TranTypeDescription = 'Cash') then
Result := ttCash
else if (TranTypeDescription = 'Check') then
Result := ttCheck
else if (TranTypeDescription = 'Debit') then
Result := ttDebit
else
Result := ttNone;
end;


可通过TTransactionTypeHelper(预期)访问类方法ToTransactionType。

有没有办法使方法ToTransactionType可以通过枚举直接访问?例如。,

TTransactionType.ToTransactionType('Cash'); 

最佳答案

正如@Victoria在评论中提到的那样,在ToTransactionType方法中添加static将使调用TTransactionType.ToTransactionType('Cash')正常工作。

如果要扩展枚举类型而不编写帮助程序,则不可能。但是还有另一种方式:

使用RTTI和单位TypInfo.Pas,您可以调用GetEnumValue()

var
i : Integer;
myTransactionValue : TTransactionType;
begin
i := GetEnumValue(TypeInfo(TTransactionType),'ttCheck');
if (i <> -1) then myTransactionValue := TTransactionType(i);
end;




还有 GetEnumName()

s := GetEnumName(TypeInfo(TTransactionType),Ord(TTransactionType.ttCheck));  // s = 'ttCheck'

关于delphi - 记录助手和类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49884335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com