Delphi: [int] in [array]操作失败



我有一个布尔值,如果一个数字存在于某个数组中,则需要设置它。我想检查它,通过这样做:

procedure test();
var
arr: Array[0..255] of smallint;
i: smallint;
begin
arr[0] := 1;
i := 1;
if i in arr then
writeln('IN')
else
writeln('OUT')
end;

运行此操作将得到错误:E2015操作符不适用于此操作数类型。但我在很多stackoverflow的答案中看到了这种方法。这个特定的实现在哪些方面不起作用?我缺少一个编译器指令?我用的是Delphi 10.3 (Rio)。

这是预期的。

in操作符用于集合,不能用于数组。

如果你需要检查一个数组是否包含一个特定的值,你需要用标准的方式遍历数组:

function MyArrayContains(const AArray: array of SmallInt;
const AValue: SmallInt): Boolean;
begin
for var i := Low(AArray) to High(AArray) do
if AArray[i] = AValue then
Exit(True);
Result := False;
end;

使用高级记录类型和操作符重载,您可以定义自己的基于数组的记录类型,并支持in操作符。

最新更新