c# - 在构建 POCO 或简单的 DTO 时,我可以使用结构而不是类吗?

标签 c#

 public class Customer
    {
        public int CustomerId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

    public struct Customer
    {
        public int CustomerId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

最佳答案

您的第二个片段是一个可变结构。这是一个非常糟糕的主意,IMO - 它们在各种不同的情况下表现得很奇怪,因为值可以在您可能不期望的情况下被复制。

当然,您可以创建不可变 结构,有时这是合适的 - 但我个人认为引用类型行为通常更自然。对于结构,您还需要担心这样一个事实,即无论您放置什么构造函数,总是可以将变量设置为默认值 - 因此数字类型的字段将为零,引用类型为 null 等。这很烦人必须处理无处不在的无效对象的可能性,而对于类,您可以向构造函数(或工厂方法)添加适当的验证,以确保您唯一需要担心的是空引用。

效率论点最终变得棘手,因为双方都有利有弊,具体取决于您对对象的处理方式。

要缩短一个很长的答案(为时已晚?)——我会默认使用类;为自然个体值(例如“瞬间”或“整数”)保存值类型。

关于c# - 在构建 POCO 或简单的 DTO 时,我可以使用结构而不是类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3806606/

相关文章:

c# - 随机数表现怪异,不是完全随机的

c# - 添加类到@Html.ActionLink

c# - 64 位 Windows 可以分配超过 7FFF'FFFF'FFFF 的虚拟内存吗?

c# - C# 中的简单归并排序

c# - 快速截取窗口屏幕截图的替代方法

c# - 获取分配给服务器的所有IP

C# WebBrowser 控件代理

c# - 指定的转换无效。(数据表中的整数值)

c# - 让 WPF 应用程序忽略 DPI 设置

c# - 如何将字典转换为查找?