代码之家  ›  专栏  ›  技术社区  ›  Holgerwa

TStringList vs.TList<string>

  •  29
  • Holgerwa  · 技术社区  · 17 年前

    type 
      sl: TStringList 
    

    与使用通用TList相比

    type 
      sl: TList<string>
    

    ?

    是否存在一种情况比另一种更好?

    谢谢

    8 回复  |  直到 14 年前
        1
  •  42
  •   Rob Kennedy    17 年前
    • TStringList知道如何按字母顺序排序。
    • TStringList不会使您的代码与所有以前版本的Delphi不兼容。
        2
  •  12
  •   Darian Miller    17 年前

    在泛型出现之前,TStringList在Delphi中已经存在很长时间了。因此,它建立了一些通用字符串列表所不具备的有用特性。

    泛型版本只是创建了一个新类型,它与处理字符串类型的TList相同。(.Add()、.Insert()、.Remove()、.Clear()等)


    如果您想要增强处理字符串列表的功能,那么TStringList就是一个不错的选择。 如果您有一些基本的编码基础知识,并且希望使用任何类型的列表,那么您可能需要将目光从TStringList移开。

        3
  •  2
  •   Gerry Coll    17 年前
    • 由于TStringList是TStrings的后代,因此它与TMemo的Lines属性、TListbox和TComboBox的项以及其他VCL组件兼容。 所以我们可以使用
        4
  •  2
  •   Steve    17 年前

    我可能会说,如果您想要向后兼容,请使用TStringList,如果您想要向前兼容(也许将来可以选择将字符串列表更改为int64列表),那么就选择TList。

        5
  •  2
  •   dzv    14 年前

    从内存的角度来看,TStringList内存使用率随着每个项中添加的TObject指针的大小而增加。TList内存使用量随着指针大小的增加而增加。如果只需要一个字符串数组而不需要搜索、替换、排序或关联操作,那么一个动态数组(字符串数组)就足够了。这缺乏TStringList或TList的良好内存管理,但理论上应该使用更少的内存。

        6
  •  2
  •   Fabricio Araujo    14 年前

    TStringlist是Delphi的一个非常通用的类。我多次使用(并滥用;-)它的Objects属性。将带分隔符的字符串快速转换为TMemo和类似控件(TListBox、TComboBox,仅列出其中一些控件)非常有趣。

    我只是不太喜欢TList,因为TStringList满足了我的需求,而不需要处理指针(因为TList是指针值的列表)。

        7
  •  1
  •   Tony Hoyle    12 年前

    对于TStringList在过去被滥用的大多数目的来说,TObjectDictionary更好——它更快,并且不需要排序。

    如果您需要TStrings对象(通常用于UI内容,因为VCL即使在XE5中也不太使用泛型),请使用TStringList-TObject所需的强制转换很烦人,但不是一个showstopper。

        8
  •  0
  •   too    12 年前

    TStringList的使用时间太长了,它有很多优点,罗布·肯尼迪都提到了这一点。

    将其用作字符串和对象对的唯一真正缺点是必须将对象强制转换为该列表中预期和存储的实际类型(阅读时),据我所知,Embarcadero没有为Delphi 2009及以上VCL库提供TStringList的通用版本。

    https://github.com/t00/deltoo#tgenericstringlist

    一个重要的注意事项是,它将默认属性从字符串更改为对象,因为在大多数情况下,当对象存储在列表中时,它也是其最常访问的属性。

    推荐文章