【发布时间】:2021-01-02 04:06:46
【问题描述】:
我想要一个接受枚举并返回字符串列表(或名称:值对)的函数。必须有可能,Object Inspector 和 Code Complete 似乎可以做到这一点。伪代码看起来很简单,但细节让我无法理解......
function ParseEnum(e: Enum, S: TStringList): TStringList;
var
i: Integer;
begin
for i := 0 to length(enum) - 1 do
S.Add(GetEnumName(e, i));
Result := S;
end;
【问题讨论】:
-
stackoverflow.com/q/31601707/62576 应该给你一个开始的地方。您的伪代码中已经存在一些问题。首先,您不能创建
tStrings的实例,因为它是一种抽象类型。您必须使用其后代之一,例如TStringList。其次,没有任何版本的TStrings.Add可以接受您使用过的两个参数。第三,GetEnumName需要一个值,将名称作为参数返回。此外,让函数返回它创建的对象也是一个坏主意,因为不清楚谁管理内存。将字符串列表传递给函数。 -
另外,
length(enum)必须是length(enum) - 1。 -
是的,我看到我的伪代码没有很好地定义。更新中……