例如,我有一个枚举类型
type
TMyEnum = (meOne, meTwo, meThree);
Run Code Online (Sandbox Code Playgroud)
现在我需要创建一个函数来确定哪个枚举落在更大的范围内,假设枚举值无限重复...
function EnumOf(const Value: Integer): TMyEnum;
begin
end;
Run Code Online (Sandbox Code Playgroud)
可以把它想象成工作日不断重复的枚举.如果我传入数字5(例如天数),它应该返回meTwo,因为......
1) meOne
2) meTwo
3) meThree
4) meOne
5) meTwo <--
6) meThree
Run Code Online (Sandbox Code Playgroud)
数字7会返回meOne,依此类推.
我应该怎么写这个函数?
使用mod运算符:
function EnumOf(const Value: Integer): TMyEnum;
begin
Assert(Value>0);
Result := TMyEnum((Value-1) mod (1+ord(high(Result))));
end;
Run Code Online (Sandbox Code Playgroud)
Value-1将基于1的Value索引调整为基于0的枚举类型索引.