的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