向通用TArray类添加非类函数

System.Generics.Collections中,TArray类型仅具有类函数。

例如:

class procedure Sort<T>(var Values: array of T); overload; static;

这意味着唯一接受的语法如下:

var
  Arr : TArray<integer>;
begin
  SetLength(Arr,2);
  Arr[0] := 5;
  Arr[1] := 3;

  TArray.Sort<integer>(Arr);
end;

我想定义一个对象的函数,以便使用以下语法对通用数组的值进行排序:

var
  Arr : TArray<integer>;
begin
  SetLength(Arr,2);
  Arr[0] := 5;
  Arr[1] := 3;

  Arr.Sort();
end;
panpan319 回答:向通用TArray类添加非类函数

您可以为非通用动态数组或完全专用的通用动态数组定义帮助器。例如,您可以编写:

public static void timeStamp() throws IOException {
        File log= new File(parametrization.link[15]);
        FileReader fileReader = new FileReader(log);
        BufferedReader buffereader = new BufferedReader(fileReader);
        String s;
        String[] s1;
        String[] words;
        String input="gracefully";
        while((s=buffereader.readLine())!=null)
         {
            words=s.split(" "); 
            for (String word : words) 
            {
            if (word.equals(input));
            {
                s=words[0];
                s1=s.split("T");

            }

            }
         } 

这允许您将方法添加到此类数组的范围。

所以你可以写

type
  TMyArray1 = array of Integer;
  TMyArray2 = TArray<Integer>;

  TMyArrayHelper1 = record helper for TMyArray1
  end;
  TMyArrayHelper2 = record helper for TMyArray2
  end;
  TMyArrayHelper3 = record helper for TArray<Integer>
  end;

但是,您不能做的是写:

type
  TIntegerArrayHelper = record helper for TArray<Integer>
    procedure Sort;
  end;

procedure TIntegerArrayHelper.Sort;
begin
  TArray.Sort<Integer>(Self);
end;

编译器根本不支持通用助手。

在我看来,这些都不值得,只需致电:

  TMyArrayHelper<T> = record helper for TArray<T>
  end;

直接。在我看来,添加一个记录助手,并且必须为您希望支持的每种元素类型创建一个记录助手,这似乎并不足以证明返回的合理性。

本文链接:https://www.f2er.com/2666358.html

大家都在问