Показать сообщение отдельно
  #8  
Старый 08.10.2016, 20:13
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Generics вам в руки (как минимум с Delphi XE, вроде. Этот пример проверял на Delphi 10.1 Berlin):
Код:
type
  TArrayHelper<T> = class
  class function IndexInBounds(AIndex : Integer; A : Array Of T) : Boolean;
  end;

class function TArrayHelper<T>.IndexInBounds(AIndex : Integer; A : Array Of T) : Boolean;
begin
  Result := (AIndex >= Low(A)) And (AIndex <= High(A));
end;

procedure TForm1.btTestClick(Sender: TObject);

  function BoolToStr(V : Boolean) : String;
  begin
    if V then Result := 'Yes' Else Result := 'No';
  end;

var
  A : Array Of String;
  B : Array Of Integer;
  C : Array Of TObject;
  D : Array [1..20] Of Pointer;
  E : Array [20..30] Of Char;
begin
  edLog.Lines.Clear;

  SetLength(A,10);
  SetLength(B,20);
  SetLength(C,30);

  edLog.Lines.Add('Dynamic array A Of String, Index 15: ' + BoolToStr(TArrayHelper<String>.IndexInBounds(15,A)));
  edLog.Lines.Add('Dynamic array B Of Integer, Index 15: ' + BoolToStr(TArrayHelper<Integer>.IndexInBounds(15,B)));
  edLog.Lines.Add('Dynamic array C Of TObject, Index 15: ' + BoolToStr(TArrayHelper<TObject>.IndexInBounds(15,C)));
  edLog.Lines.Add('Static array D Of Pointer, Index 15: ' + BoolToStr(TArrayHelper<Pointer>.IndexInBounds(15,D)));
  edLog.Lines.Add('Static array E Of Char, Index 15: ' + BoolToStr(TArrayHelper<Char>.IndexInBounds(15,E)));
end;

Результат:
Код:
Dynamic array A Of String, Index 15: No
Dynamic array B Of Integer, Index 15: Yes
Dynamic array C Of TObject, Index 15: Yes
Static array D Of Pointer, Index 15: Yes
Static array E Of Char, Index 15: No