我们已经在SO中看到了很多关于c#中的类vs结构的讨论.最后得出的结论是它的堆/堆内存分配.并建议在小型数据结构中使用结构.
现在我有一种情况来决定这两种选择中的简单数据存储.在我们的应用程序中,我们有数千个类,只是作为简单的数据存储(仅暴露的公共字段),它们在不同的模块和服务之间传递.
根据我的理解,出于性能原因,我觉得最好继续使用struct而不是类.因为这些是简单的数据结构,所以只能充当数据存储.
在继续这一过程之前,我需要经历过这场斗争的人们的一些专家建议.
Gis*_*shu 54
我会根据以下标准做出选择
Emm*_*RIN 14
Structs over Classes的一个非常酷的,不太知名的优点是在结构中有一个GetHashcode和Equals的自动实现.
当词典需要键时,这非常有用
GetHashcode和Equals的结构实现基于结构实例的二进制内容+引用成员的反射(如String成员和类的其他实例)
所以以下代码适用于GethashCode/Equals:
public struct Person
{
    public DateTime Birthday { get; set; }
    public int Age{ get; set; }
    public String Firstname { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
        Person p1 = new Person { Age = 44, Birthday = new DateTime(1971, 5, 24), Firstname = "Emmanuel" };
        Person p2 = new Person { Age = 44, Birthday = new DateTime(1971, 5, 24), Firstname = "Emmanuel" };
        Debug.Assert(p1.Equals(p2));
        Debug.Assert(p1.GetHashCode() == p2.GetHashCode());
    }
}
当Person是结构时,两个断言都成功.如果Person是类而不是结构,则两个断言都会失败
参考:https: //msdn.microsoft.com/en-Us/library/2dts52z7%28v=vs.110%29.aspx
问候,最好的编码
我似乎永远不会真正记住,结构是如何不同的,但它们是.以微妙的方式.事实上,有时他们会来咬你.
所以.除非你知道自己在做什么,否则只要坚持上课.
我知道这听起来有点新手.我知道我现在应该去查看差异并在这里显示它们 - 但这已经由其他人完成了.我所说的只是添加不同类型的对象会产生语义负担,一些额外的复杂性,您需要仔细考虑.
如果我没记错的话,最大的问题之一就是结构的值语义:传递它们会导致不同的对象(因为它们通过值传递).如果你在一个地方改变一些字段,请注意在所有其他地方该字段没有改变!这就是为什么每个人都建议结构的不变性!
编辑:对于你描述的情况,结构将不起作用!