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

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

<分区>

Possible Duplicate:
C#: Structs versus classes

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

我知道,如果我有固定大小的数据(如整数、 double 等),那么坚持使用结构会更好……但是在我的例子中,我有字符串和包含字符串甚至其他结构的列表……如果我将与结构一起使用,它看起来像这样:

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)

字符串和列表让我感到困惑,尤其是在速度方面。由于我将搜索大量歌曲,因此我想确保我使用的是最快的一首。

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

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

最佳答案

I know that it would be better to stick with structures if I have fixed size data like integers, doubles etc

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

I am also confused about boxing and unboxing. I assume that the list of string contains only the pointers to "the string" and same for the structures(trying to think low level).

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

参见 class design guidelines了解更多信息,但基本上我会默认使用类,除非我有一个非常有说服力的理由来创建一个结构。

关于c# - 结构与类,字符串和列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14403509/

相关文章:

mysql - 如何将一列中的所有行乘以 3?

vb.net - 尝试使用 .ResolveName 时出现 EWS 错误

vb.net - 你如何用 vb.net 在 5 中找到最大的数?

c# - 检查值是否在枚举范围内而不使用 IsDefined

c# - 如何在网页上搜索一些文字?

来自旧版 C++ 应用程序窗口问题的 C# 子进程

c# - 将 URI 路径转换为 ​​.NET 中的相对文件系统路径

c# - 计算2次之间的差值,然后比较差值是否小于5分钟

c# - 如何在不使用 MVC 回发 session 的情况下保存数据?

c# - C# Lambda 函数的含义