我应该为我的Linq2Sql数据使用Struct而不是轻量级数据类吗?
我经常使用linq2sql生成的类,并创建一个简单的仅数据类
public class myentity { public Guid id { get; set; } public string name { get; set; } // etc }
我没有把方法放在这些类中,我主要使用它们作为帮助类,所以我可以很容易地序列化到/从json和其他类似的操作。
我的问题是,在这种情况下我应该使用结构而不是类吗?
将它作为一个结构或多或少的结构定义似乎是有意义的,但我不知道这里的性能是否理想,因为我经常将类从方法传递给方法而我不想要一个大量的副本,因为结构是价值类型。
我经常做的另一件事是使用Linq2Sql的延迟执行来返回我自己的Linq2Sql类的轻量级版本,而不是它们生成的那个。 我不完全确定使用结构而不是类会在这里产生一些不利的性能影响。
我如何使用延迟执行的一个例子是这样的
public IEnumerable getEntities() { return from me in MyEntity return new myentity() { id = me.id, name = me.name }; } public IEnumerable getEntitiesThatStartWith(string s) { return from me in getEntities() where me.name.StartsWith(s); }
我会去class
。 可变struct
很少是好事。 如果你没有看到使用结构而不是类的明显优势,你应该避免它。
具体来说,在您的情况下,使用struct
使得方法更难以修改实例的内容(例如,从JSON反序列化并填充一些属性;您必须始终使用ref
)。
假设Entity
是一个结构:
List entities = ...; entities[0].Name = "Test"; // won't compile.
我认为你误解了结构的意义。 你说“它或多或少是结构的定义”,但你没有提到过值类型语义(复制) – 这就是结构IMO的定义。 它有多少种方法并不重要 – 它是关于值或引用类型的语义。
正如Mehrdad所说,可变结构很少是好事。 我更强烈地说:它们几乎总是邪恶的,并且会导致非常难以诊断的奇怪错误。 只是说不 – 根据我的经验,结构很少是正确的选择。 它们用于基本数据类型,如数字,日期,字符,枚举等。
上述就是C#学习教程:我应该为我的Linq2Sql数据使用Struct而不是轻量级数据类吗?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/957032.html