Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该为我的Linq2Sql数据使用Struct而不是轻量级数据类吗?_C#_.net_Linq To Sql_Struct - Fatal编程技术网

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

C# 我应该为我的Linq2Sql数据使用Struct而不是轻量级数据类吗?,c#,.net,linq-to-sql,struct,C#,.net,Linq To Sql,Struct,我经常使用linq2sql生成的类,并创建一个简单的纯数据类,如下所示 public class myentity { public Guid id { get; set; } public string name { get; set; } // etc } 我没有将方法放在这些类中,我主要将它们用作助手类,这样我就可以很容易地序列化到json和其他类似的操作中 我的问题是,在这种情况下,我应该使用结构而不是类吗 把它变成一个结构似乎是有意义的,因为它或多或少是

我经常使用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);
}
public IEnumerable getEntities()
{
从MyEntity中的我返回返回新的MyEntity(){id=me.id,name=me.name};
}
公共IEnumerable GetEntities开始于(字符串s)
{
从getEntities()中的我返回,其中me.name.StartsWith;
}

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

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

假设
实体
是一个结构:

List<Entity> entities = ...;
entities[0].Name = "Test"; // won't compile.
列出实体=。。。;
实体[0]。Name=“测试”//不会编译。

我想你误解了结构的意义。你说“这或多或少是一个结构的定义”,但你没有提到过值类型语义(复制)——这就是结构的定义,依我看。不管有多少方法,等等——这是关于值或引用类型语义的


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

啊,也许,老实说,我已经推迟了很多关于struct的学习,我正在尝试学习它们,这正是我来到这里的原因。我只是认为结构是一个轻量级对象,只存储数据,没有任何方法,这正是我的数据类所做的。哇,我不知道,我需要阅读更多关于结构的内容,谢谢