c# - 我应该为我的 Linq2Sql 数据使用 Struct 而不是轻量级数据类吗?

标签 c# .net linq-to-sql struct

我经常采用 linq2sql 生成的类,并像这样创建一个简单的纯数据类

public class myentity
{
     public Guid id { get; set; }
     public string name { get; set; }
     // etc
}

我没有在这些类中放置方法,我主要将它们用作辅助类,因此我可以很容易地序列化到/从 json 和其他类似操作。

我的问题是,在这种情况下我应该使用结构而不是类吗?

将它变成一个结构似乎是有意义的,因为它或多或少是一个结构的定义,但我不知道这里的性能是否理想,因为我经常在方法之间传递类,但我不知道不需要大量副本,因为结构是值类型。

我经常做的另一件事是使用 Linq2Sql 的延迟执行来返回我自己的 Linq2Sql 类的轻量级版本,而不是它们生成的那个。我不完全确定使用结构而不是类是否会对此处的性能产生一些不利影响。

我如何使用延迟执行的一个例子是这样的

public IEnumerable<myentity> getEntities()
{
     return from me in MyEntity return new myentity() { id = me.id, name = me.name };
}

public IEnumerable<myentity> getEntitiesThatStartWith(string s)
{
     return from me in getEntities() where me.name.StartsWith(s);
}

最佳答案

我会选择。可变的 struct 很少是一件好事。如果你没有看到使用结构而不是类的明显优势,你应该避免它。

具体来说,在您的情况下,使用 struct 会使方法更难修改实例的内容(例如,从 JSON 反序列化并填充一些属性;您必须使用 ref 一直)。

假设 Entity 是一个结构:

List<Entity> entities = ...;
entities[0].Name = "Test"; // won't compile.

关于c# - 我应该为我的 Linq2Sql 数据使用 Struct 而不是轻量级数据类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1412747/

相关文章:

visual-studio-2008 - 获取具有一组特定子元素的项目(高级查询 - 可能吗?)

c# - 类型 'System.String[]' 不支持比较运算符

c# - 系统.Windows.Markup.XamlParseException

c# - Windows 上 Git 的持续集成

c# - List<T> 实例之间的关系

.net - Arraylist 是类型安全的还是强类型的?

c# - Linq 到 Sql : Add additional data to result

c# - 给定一个表示类型的字符串,我需要知道它是值类型还是引用类型

c# - OWIN Startup 方法如何获取网站的基本 URL?

c# - C# 中按修改日期循环遍历文件