在我的代码中,我有以下类型和数组 我得到一个字符串,我想检查它是否存在于数组中,从索引我需要从TProgramModule获取一个值
示例:我有文本Job,需要找到它在数组ModuleName中有索引3然后我需要检查TProgramModule并获取modJobsystem,因为它是第3项
希望能解释我在寻找什么 - 欢迎任何其他方式获得结果
type
TProgramModule = (
modBlank,
modMeter,
modFinance,
modJobsystem,
modTimesheet,
modTaskmanagement,
modHomeContents,
modDiary,
modCases,
modDocuments,
modContacts
);
const
ModuleName: array[TProgramModule] of string = (
'Blank',
'Måleraflæsning',
'Konti',
'Job',
'Timesedler',
'Opgaver',
'Indbo',
'Dagbog',
'Sagsstyring',
'Dokumentstyring',
'Kontaktpersoner'
);
答案 0 :(得分:4)
这可以通过循环完成:
var
i: Integer;
Find: string;
Module: TProgramModule;
begin
Find := 'Job';
for i := Low(ModuleName) to High(ModuleName) do
if ModuleName[i] = Find then
begin
Module := i;
Break;
end;
end;
您应该将此转换为一个函数,该函数接受要作为字符串搜索的值并返回正确的TProgramModule
。如果在ModuleName
中找不到字符串,则该问题将成为函数返回的内容。
function FindProgramModule(const Name: string): TProgramModule;
var
i: TProgramModule;
begin
for I := Low(ModuleName) to High(ModuleName) do
if ModuleName[i] = Name then
Exit(i);
Exit(modBlank); // Not found - return whatever default value here
end;
对于不支持Exit()
的旧版Delphi:
function FindProgramModule(const Name: string): TProgramModule;
var
i: TProgramModule;
begin
Result := modBlank; // Whatever default value goes here
for I := Low(ModuleName) to High(ModuleName) do
if ModuleName[i] = Name then
begin
Result := i;
Break;
end;
end;
答案 1 :(得分:2)
我会这样写:
function FindProgramModule(const Name: string): TProgramModule;
begin
for Result := Low(ModuleName) to High(ModuleName) do
if ModuleName[Result] = Name then
Exit;
Raise EModuleNotFound.CreateFmt(
'Module not recognised: %s',
[Name]
);
end;
如果您不想引发异常,则返回sentinel枚举以指示模块未被识别。