相关疑难解决方法(0)

为什么TList.Remove()会产生EAccessViolation错误?

为什么在执行下面的代码时会引发EAccessViolation?

uses
  Generics.Collections;
  ...

var
  list: TList<TNotifyEvent>;
  ...

begin
  list := TList<TNotifyEvent>.Create();
  try
    list.Add(myNotifyEvent);
    list.Remove(myNotifyEvent);  // EAccessViolation at address...
  finally
    FreeAndNil(list);
  end;
end;

procedure myNotifyEvent(Sender: TObject);
begin
  OutputDebugString('event');  // nebo cokoliv jineho
end;
Run Code Online (Sandbox Code Playgroud)

delphi generics delphi-2009 tlist

8
推荐指数
2
解决办法
1767
查看次数

Delphi中是否有Hash Arrays?

我正在学习Delphi,但喜欢在Perl和Java中使用哈希数组.Delphi中是否存在数据结构的混合?

我知道可以使用TStringList作为哈希数组:

var 
   myHash:TStringList);

begin 

  myHash:=TStringList.Create();
  myHash.values['color']:='blue';

  Showmessage(myHash.Values['color']);  //blue   

  myHash.free;

end;
Run Code Online (Sandbox Code Playgroud)

是否有可能在Delphi中构建更复杂的数据结构,如Perl的数组哈希等?

java arrays delphi perl hash

6
推荐指数
1
解决办法
323
查看次数

TObjectList <T> .Contains导致Delphi 2009中的访问冲突

在Delphi 2009中,到目前为止我没有使用Generics的主要问题(使用Generics.Collections列表,没有特殊的泛型功能).

现在我发现这段代码会导致访问行中的AV MyList.Contains.

如果我声明TMyList = class(TList<TMyEntry>),则错误消失;

我应该避免TObjectList<T>或是我的代码中的其他内容导致此错误?

type
  TMyEntry = class(TStringlist);
  TMyList = class(TObjectList<TMyEntry>);

procedure TListTests.TestAV;
var
  Entry: TMyEntry;
  MyList: TMyList;
begin
  MyList := TMyList.Create;
  try
    Entry := TMyEntry.Create;

    MyList.Add(Entry);

    Assert(MyList.Contains(Entry));  // <--- AV

  finally
    MyList.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

delphi generics delphi-2009

2
推荐指数
1
解决办法
1061
查看次数

标签 统计

delphi ×3

delphi-2009 ×2

generics ×2

arrays ×1

hash ×1

java ×1

perl ×1

tlist ×1