【问题标题】:Delphi - Generics - Is there an Add method?Delphi - 泛型 - 有 Add 方法吗?
【发布时间】:2014-08-14 17:22:31
【问题描述】:

使用泛型来初始化数组很方便,但是我找不到 Add 方法,所以我由此推断(如果我错了,请纠正我)在那种情况下,我必须使用传统的方式: SetLength 扩大数组,然后将新值分配给数组中最近添加的项。是这样吗?

【问题讨论】:

  • 泛型不会以任何方式“初始化数组”,所以我不确定这应该是什么意思。 动态数组有一个伪构造函数,允许你初始化它们,但没有真正的方法可以这样做。
  • 大概你的意思是TArray<T>吧?
  • 你可以看看TList<T>,它有一个Add()方法和一个AddRange()方法。

标签: delphi delphi-xe4


【解决方案1】:

泛型不会初始化数组或其他任何事情。它们只是声明灵活类型的一种方式,而不是数据。不要被动态数组构造函数所迷惑,它允许您使用类似构造函数的语法来初始化具有值的动态数组,但这与泛型无关。

数组,无论是通用的还是其他的,根本没有任何方法,更不用说Add() 方法了。正如您所描述的,您必须手动编写逻辑 - 增加数组长度,然后为新分配的插槽分配一个值。这是目前唯一可用的选项。

【讨论】:

  • 正如@DavidHeffernan 所说,他可能使用了TArray<Something>,这几乎看起来 像一个泛型类,即使它不是。正如@LURD 所说,他可以改用TList<T>
【解决方案2】:

我假设由于您正在寻找 Add() 方法,因此您真的根本不需要数组

相反,您可能想要一个真正的通用(类似数组) 集合,例如TArrayList<T>。它拥有Array 所做的一切,以及Add()Remove()AddRange() 等所有收集方法

通用的TList<T> 也可以使用,但是缺少您可能想要的所有熟悉的 Array 方法和属性。

您可能还想查看其他一些通用集合类,例如 TDictionary<T>THashTable<T> 等...

【讨论】:

  • 在 Delphi 中找不到 TArrayList<T>。它是一个外部库吗?
  • 对不起...我对.Net有点困惑..哈哈。 TList 是你想要的。 .Net 中的ArrayList<object> 只能存储“对象”,因此您需要在运行时知道类型并适当地执行转换。
  • 这是一个有趣的 SO Q&A,可能不直接适用,但有一些关于使用和扩展泛型的很酷的东西:stackoverflow.com/questions/1600239/…
猜你喜欢
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多