C# 将结构保持为值类型-我可以使用/返回哪些类型?

C# 将结构保持为值类型-我可以使用/返回哪些类型?,c#,struct,types,C#,Struct,Types,我想存储很多3字节左右的小项目(好吧,几千个),所以我考虑使用struct。 我不确定的是如何将其保持为值类型,例如,如果我只将3个字节存储为字节,并重写ToString()、GetHashCode()和Equals(),它将保持为值类型,对吗? 但是如果我想返回3个字节作为一个列表(返回,而不是存储!),那该怎么办呢 公共列表获取值 { 得到 { 返回新列表(3){byte1,byte2,byte3}; } } …但这会把事情搞砸吗? 这个结构的一部分数据现在会在堆上吗 我确实在什么地方读到

我想存储很多3字节左右的小项目(好吧,几千个),所以我考虑使用struct。 我不确定的是如何将其保持为值类型,例如,如果我只将3个字节存储为字节,并重写ToString()、GetHashCode()和Equals(),它将保持为值类型,对吗? 但是如果我想返回3个字节作为一个列表(返回,而不是存储!),那该怎么办呢

公共列表获取值
{
得到
{
返回新列表(3){byte1,byte2,byte3};
}
}
…但这会把事情搞砸吗? 这个结构的一部分数据现在会在堆上吗

我确实在什么地方读到过这东西,但我记不起在哪里,也找不到了

谢谢你给我的建议


Richard

不,这只是一个属性-列表是在访问属性时创建的,但仅此而已。您尚未在类型中声明任何额外字段


即使您声明了一个类型为
List
的字段,您的类型仍然是值类型-所有结构都是值类型-只是其中一个字段将具有一个作为引用的值。这是相对少见的,但并非闻所未闻。

您声明的属性会在堆上创建一个新对象,但不会将结构更改为引用类型。结构是一种值类型,period。从技术上讲,从我所看到的来看,每个小对象只需要一个实例。您可以将所有可能的字节保存在“存储”列表中,并记住它们的索引。每次出现一个新的(存储中不存在的)字节时,您就添加它,并记住它的索引。Jon,这一点都不少见<我想到了code>KeyValuePair,其中任何一个类型参数都是引用类型。@phoog:嗯,我只说了相对不常见的:)(
List.Enumerator
我也想到了。)
public List<byte> GetValues
    {
      get
        {
             return new List<byte>(3) { byte1, byte2, byte3 };
        }
    }