我试图创建一个数组来将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,所以我需要先将它传递给一个数组。
让我知道,谢谢!
答案 0 :(得分:5)
您声明数组属性的语法很接近,但您需要使用getter / setter方法而不是直接字段访问,并且数组属性不能声明为public function verifyEmail($code){
return verifyCol($code, 'Email');
}
public function verifyPhone($code){
return verifyCol($code, 'Phone');
}
:
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;
答案 1 :(得分:2)
您已声明array property,但有一些语法错误。但是,您在问题和注释中声明您希望属性是动态数组。这与数组属性不同。
声明一个动态数组属性,如下所示:
type
ProductAvailabilityResult = class(TRemotable)
private
FResultArray: TArray<string>;
published
property ResultArray: TArray<string> read FResultArray write FResultArray;
end;
像这样填充:
var
i: Integer;
List: TStringList;
par: ProductAvailabilityResult;
arr: TArray<string>;
....
List := ...;
par := ...;
SetLength(arr, List.Count);
for i := 0 to List.Count-1 do
arr[i] := List[i];
par.ResultArray := arr;