的Write
和Writeln
程序不能通用的参数来调用。因此,明显的结论是,在调用Write
和Writeln
之前,您需要将通用值转换为字符串。
这可以通过采取下列功能的优势使用TValue
来实现:
- 通用
TValue.From<T>
方法,使一个新的TValue
实例。
- 将最常见类型转换为字符串的
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]
顺便它真的惹恼了我,我要创建一个类来保存这些方法。我不明白为什么语言设计师会做出这个决定。
请您澄清一下问题。你的代码工作得很好。这是一旦你修复语法错误 –
我假设他或她想要为TArray,IOW中的任何类型的T做这个,他想要一个'class procedure Print (const A:TArray ; const Name:串);'。我假设他不知道如何写'写(A [I]);'部分如果'A [I]'是通用的。 –
@RudyVelthuis正是!字符串等 – user3764855