代码之家  ›  专栏  ›  技术社区  ›  Allen Rice 0x6A75616E

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

  •  2
  • Allen Rice 0x6A75616E  · 技术社区  · 16 年前

    我经常使用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);
    }
    
    2 回复  |  直到 16 年前
        1
  •  7
  •   Mehrdad Afshari    16 年前

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

    使方法更难修改实例的内容(例如,从JSON反序列化并填充一些属性;您必须使用 ref

    假设 Entity 是一个结构体:

    List<Entity> entities = ...;
    entities[0].Name = "Test"; // won't compile.
    
        2
  •  5
  •   Jon Skeet    16 年前

    -以及 那是 结构体的定义,IMO。不管有多少方法等等,这都与值或引用类型语义有关。

    正如Mehrdad所说,可变结构很少是一件好事。我会更强烈地说:它们几乎总是邪恶的,会导致很难诊断的奇怪错误。根据我的经验,结构很少是正确的选择。它们用于基本数据类型,如数字、日期、字符、枚举等。

    推荐文章