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

Sha*_*ane 13 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; }
    }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 14

你的第二个片段是一个可变的结构.这是一个非常糟糕的主意,IMO - 它们在各种不同的情况下表现得很奇怪,因为当你可能没想到它们时,可以复制价值.

你当然可以创建不可变的结构,有时候这是合适的 - 但我个人认为引用类型行为通常更自然.对于结构体,您还需要担心无论您使用何种构造函数,始终可以将变量设置为默认值 - 因此对于数字类型,字段将为零,对于引用类型,字段将为零.这对于必须处理无处不在的对象的可能性,而对于类,您可以向构造函数(或工厂方法)添加适当的验证,以确保您唯一需要担心的是空引用.

效率论证最终变得棘手,因为双方都有利弊,具体取决于你对对象做了什么.

缩短答案(太迟了?) - 我会默认使用类; 为自然个体值("即时"或"整数")的事物保存值类型.