gpt4 book ai didi

delphi - 将通用数组打印到控制台

转载 作者:行者123 更新时间:2023-12-02 02:34:03 28 4
gpt4 key购买 nike

如何将通用数组打印到控制台?这适用于简单的整数数组,但不适用于通用数组。

class procedure Print(const A: TArray<Integer>; const Name: String);
var
I: Integer;
begin
Write('Array ' + Name +' : ');
Write('[');
for I := 0 to High(A) do
if I <> High(A) then
begin
WriteLn(A[I]);
Write(', ');
end
else
Write(A[I]);
Write(']');
WriteLn('');
end;

最佳答案

WriteWriteln不能使用通用参数调用过程。因此,显而易见的结论是,您需要在调用 Write 之前将通用值转换为字符串。和Writeln

这可以使用 TValue 来实现通过利用以下功能:

  1. 通用 TValue.From<T>制作新的 TValue 的方法实例。
  2. TValue.ToString将最常见类型转换为字符串的方法。

所以,我认为您正在寻找这样的东西:

{$APPTYPE CONSOLE}

uses
System.Rtti;

type
TMyClass = class
class procedure Write<T>(const arr: array of T; const Name: string); static;
end;

class procedure TMyClass.Write<T>(
const arr: array of T; const Name: string);
var
I: Integer;
begin
System.Write('Array ' + Name +' : [');
for I := 0 to high(arr) do begin
System.Write(TValue.From(arr[i]).ToString);
if I <> high(arr) then begin
System.Write(', ');
end;
end;
System.Writeln(']');
end;

begin
TMyClass.Write<Integer>([1,2,3,4], 'integer');
TMyClass.Write<Double>([42.666, 123.4], 'floating point');
TMyClass.Write<string>(['foo', 'bar'], 'string');
Readln;
end.

输出

Array integer : [1, 2, 3, 4]Array floating point : [42.666, 123.4]Array string : [foo, bar]
<小时/>

顺便说一句,我必须创建一个类来保存这些方法,这真的让我很恼火。我不明白为什么语言设计者做出这个决定。

关于delphi - 将通用数组打印到控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24714842/

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