首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Delphi 2009中的Generic TList <>在IndexOf上崩溃

在Delphi 2009中,TList<>是一个泛型类,用于存储对象。IndexOf方法用于查找指定对象在列表中的索引。如果在列表中找不到指定对象,则返回-1。

在某些情况下,使用IndexOf方法可能会导致程序崩溃。这通常是由于比较对象时出现问题。为了解决这个问题,您可以:

  1. 重写对象的Equals方法。Equals方法用于比较两个对象是否相等。在IndexOf方法中,它将使用Equals方法来比较列表中的对象和指定对象。
代码语言:delphi
复制
TMyObject = class
  // ...
  public
    function Equals(Obj: TObject): Boolean; override;
  // ...
end;

function TMyObject.Equals(Obj: TObject): Boolean;
begin
  Result := (Obj is TMyObject) and (Self.SomeProperty = TMyObject(Obj).SomeProperty);
end;
  1. 使用自定义比较器。如果您不能重写对象的Equals方法,或者希望使用不同的比较方式,可以使用自定义比较器。自定义比较器是一个实现IComparer<T>接口的类。
代码语言:delphi
复制
TMyComparer = class(TInterfacedObject, IComparer<TMyObject>)
  // ...
  public
    function Compare(const Left, Right: TMyObject): Integer;
  // ...
end;

function TMyComparer.Compare(const Left, Right: TMyObject): Integer;
begin
  if Left.SomeProperty< Right.SomeProperty then
    Result := -1
  else if Left.SomeProperty > Right.SomeProperty then
    Result := 1
  else
    Result := 0;
end;

然后,在调用IndexOf方法时,传递自定义比较器。

代码语言:delphi
复制
var
  MyList: TList<TMyObject>;
  MyObject: TMyObject;
  Comparer: IComparer<TMyObject>;
  Index: Integer;
begin
  MyList := TList<TMyObject>.Create;
  try
    // ...
    MyObject := TMyObject.Create;
    // ...
    Comparer := TMyComparer.Create;
    Index := MyList.IndexOf(MyObject, Comparer);
    // ...
  finally
    MyList.Free;
  end;
end;

这样,您就可以避免IndexOf方法中的崩溃问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的视频

领券