gpt4 book ai didi

arrays - 如何在Delphi中正确声明数组属性?

转载 作者:行者123 更新时间:2023-12-03 15:21:57 24 4
gpt4 key购买 nike

我正在尝试创建一个数组,将 TStringList 的每个项目存储到一个数组中,该数组的大小可能会根据所述 TStringList 中项目的数量而变化。

我知道我的语法是错误的,我想要的可能是一个动态数组,因此 [0..100] 也可能是错误的,但我在网上找不到任何替代语法。

ProductAvailabilityResult = Class(TRemotable)
private
FResultArray : array[1..100] of string;
published
property ResultArray[Index: Integer]: array of string read FResultArray write FResultArray;
End;

这就是我调用它并填充它的方式。 conditionList 是我的 TStringList,我会将其填充到我的数组中。

for I := 0 to conditionList.Count - 1 do
begin
aProductAvailabilityResult.ResultArray[I] := conditionList[I];
end;

如果您可能对我正在做的事情有或没有其他建议,那么进行此设置的原因是因为它是一个通过 SOAP 服务器发送结果的 Web 服务应用程序,而且我不认为我的 PHP/Soap 客户端可以读取TStringLists,所以我需要先将它传递给一个数组。

请告诉我,谢谢!

最佳答案

声明数组属性的语法很接近,但您需要使用 getter/setter 方法而不是直接字段访问,并且数组属性不能声明为 published:

type
ProductAvailabilityResult = class(TRemotable)
private
FResultArray : array of string;
function GetResultArray(Index: Integer): string;
function GetResultArrayCount: Integer;
procedure SetResultArray(Index: Integer; const Value: string);
procedure SetResultArrayCount(Value: Integer);
public
property ResultArray[Index: Integer]: string read GetResultArray write SetResultArray default;
property ResultArrayCount: Integer read GetResultArrayCount write SetResultArrayCount;
end;

function ProductAvailabilityResult.GetResultArray(Index: Integer): string;
begin
Result := FResultArray[Index];
end;

function ProductAvailabilityResult.GetResultArrayCount: Integer;
begin
Result := Length(FResultArray);
end;

procedure ProductAvailabilityResult.SetResultArray(Index: Integer; const Value: string);
begin
FResultArray[Index] := Value;
end;

procedure ProductAvailabilityResult.SetResultArrayCount(Value: Integer);
begin
SetLength(FResultArray, Value);
end;

然后你可以这样做:

aProductAvailabilityResult.ResultArrayCount := conditionList.Count;
for I := 0 to conditionList.Count - 1 do
begin
aProductAvailabilityResult[I] := conditionList[I];
end;

您可能需要考虑添加一个方法来从源 TStrings 复制字符串:

type
ProductAvailabilityResult = class(TRemotable)
private
...
public
procedure AssignStrings(AStrings: TStrings);
...
end;

procedure ProductAvailabilityResult.AssignStrings(AStrings: TStrings);
var
I: Integer;
begin
SetLength(FResultArray, AStrings.Count);
for I := 0 to AStrings.Count - 1 do
FResultArray[I] := AStrings[I];
end;

aProductAvailabilityResult.AssignStrings(conditionList);

关于arrays - 如何在Delphi中正确声明数组属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40770277/

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