Delphi对象:TObjectList迭代的快捷方式

Delphi对象:TObjectList迭代的快捷方式,object,oop,delphi,iteration,delphi-10.4-sydney,Object,Oop,Delphi,Iteration,Delphi 10.4 Sydney,我开始学习并在我的项目中积极使用OOP。我发现像LDevices.Devices[I]这样的结构看起来非常麻烦,使代码难以阅读 所以我的问题是:有没有什么方法可以让一个字段像LDevices[i],而不是LDevices.Devices[i]那样快捷地访问它设备是对象列表 我的对象的结构,供参考: TDeviceStorage = class (TObject) private DevicesByID: TDictionary<Integer,TDevice>;

我开始学习并在我的项目中积极使用OOP。我发现像
LDevices.Devices[I]
这样的结构看起来非常麻烦,使代码难以阅读

所以我的问题是:有没有什么方法可以让一个字段像
LDevices[i]
,而不是
LDevices.Devices[i]
那样快捷地访问它<代码>设备是
对象列表

我的对象的结构,供参考:

TDeviceStorage = class (TObject)
    private
      DevicesByID: TDictionary<Integer,TDevice>;
    public
      Devices: TObjectList<TDevice>;
      Constructor Create;
      Destructor Destroy; override;
      procedure AddDevice(aID: Integer; aName, aShortName: String; aSubtype, aLocation: Integer; aSteamID: String);
      procedure Clear();
      function Count(): Integer;
      function DeviceByID(aID: Integer): TDevice;
      function DeviceIndex(aID: Integer): Integer;
  end;
TDeviceStorage=class(TObject)
私有的
DevicesByID:TDictionary;
公众的
设备:TObjectList;
构造函数创建;
毁灭者毁灭;推翻
过程AddDevice(aID:Integer;aName,aShortName:String;aSubtype,aLocation:Integer;aSteamID:String);
程序清晰();
函数Count():整数;
函数DeviceByID(aID:Integer):t设备;
函数DeviceIndex(辅助:整数):整数;
结束;

是的,这正是使用的目的:

TDeviceStorage=class(TObject)
私有的
FDevicesByID:t字典;
f设备:TObjectList;
函数GetDeviceCount:整数;
函数GetDevice(索引:整数):TDevice;
过程SetDevice(索引:整数;常量值:TDevice);
公众的
构造函数创建;
毁灭者毁灭;推翻
过程AddDevice(AID:Integer;const AName,AShortName:string;
ASubtype,位置:整数;常量:字符串);
程序清晰;
函数DeviceByID(AID:Integer):t设备;
函数DeviceIndex(辅助:整数):整数;
属性设备[索引:整数]:t设备读取GetDevice写入SetDevice;违约
属性DeviceCount:整数读取GetDeviceCount;
结束;

函数TDeviceStorage.GetDevice(索引:整数):TDevice; 开始 结果:=FDevices[指数]; 结束; 函数TDeviceStorage.GetDeviceCount:整数; 开始 结果:=FDevices.Count; 结束; 过程TDeviceStorage.SetDevice(索引:整数;常量值:TDevice); 开始 f设备[索引]:=值; 结束;
现在,如果
DS:TDeviceStorage
,您可以编写
DS[i]
来访问
FDevices
中的
i
第四个设备。我编辑了您的问题,删除了第二个不相关的问题。这里每次只问一个问题。将设备设为私有,并声明一个标记为默认值的数组属性,该属性返回设备的第i项。也就是说,奇怪的是,有两个集合持有相同的对象。“你为什么这样做呢?”戴维德费曼回答有点复杂。简短版本:没有强有力的理由。长版本:我们有一些遗留支持问题,导致某些东西有两个ID。一个始终是连续的:0、1、2、3、4等。另一个是来自DB ID的,其中有洞:1、3、8、9等。因此,如果我必须通过第二个ID获取设备,我使用字典。第二个原因是孩子们用不止一本字典来搜索对象,用第二个ID以外的其他字段来搜索。我搞不清楚以前谁拥有什么。谢谢!很好的解释+同样,考虑为类实现枚举器,然后可以在不使用索引的情况下在循环中枚举它。