结构与类,字符串和列表?

时间:2013-01-18 16:42:52

标签: c# .net vb.net class data-structures

  

可能重复:
  C#: Structs versus classes

我正在创建一个库,它相对较小,需要一个包含MP3文件标签的数据库。

我知道如果我有固定大小的数据,如整数,双打等,最好坚持使用结构......但在我的情况下,我有字符串和列表,其中包含字符串甚至其他结构...如果我将采用结构,它将如下所示:

Public Structure STitle
    Dim Title As String
    Dim Path As String
End Structure

Public Structure SAlbum
    Dim Album As String
    Dim Songs As List(Of STitle)
End Structure

Public Structure SArtist
    Dim Artist As String
    Dim Albums As List(Of SAlbum)
End Structure

然后,我会有这样的事情:

Public SongLibrary As New List(Of SArtist)

字符串和列表使我感到困惑,尤其是速度方面。因为我会搜索很多歌曲,所以我想确保使用最快的歌曲。

我也对拳击和拆箱感到困惑。我假设字符串列表只包含指向“字符串”的指针,并且结构相同(试图考虑低级别)。但是,我不知道是否因为大小无法确定(或者是吗?)而无法进行装箱,这会减慢搜索速度(不使用arraylists的原因),是否会发生(或者不是这样)?

那么选择哪一个?类或结构?还是还有其他更适合的东西?

2 个答案:

答案 0 :(得分:7)

  

我知道如果我有固定大小数据,如整数,双打等,最好坚持使用结构

你怎么“知道”那个?根据我的经验,创建自定义值类型很少是一个好主意。它确实发生了 - 例如我的Noda Time项目中有很多 - 但通常我会很谨慎。在暴露可变结构之前,我也非常谨慎。

  

我也对拳击和拆箱感到困惑。我假设字符串列表只包含指向“字符串”的指针,并且结构相同(试图考虑低级别)。

对于结构,不是指针(引用)。例如,List(Of Integer)Integer()实现。该数组直接包含值。使用通用集合时,不需要装箱。

有关详细信息,请参阅class design guidelines,但基本上我默认使用类,除非我有真正令人信服的创建结构的原因。

答案 1 :(得分:2)

  

字符串和列表使我感到困惑,尤其是速度方面。自从我   我会搜索很多歌,我想确保我   使用最快的一个

不清楚你的案例中字符串和列表之间的关系是什么,但快速搜索通常与数据在集合中的分布方式有关。

最快,通常是:排序集合并对其进行二进制搜索。

特别是从快速数据检索的角度来看,不使用结构,因为当您从集合中检索数据时(如果是结构),数据将被复制到另一个,新对象。在类的情况下,您将获得指针(效率很高)。

使用引用类型(类)而不是结构