Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.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# 我是否应该为此匿名类型创建专用类?_C#_Linq - Fatal编程技术网

C# 我是否应该为此匿名类型创建专用类?

C# 我是否应该为此匿名类型创建专用类?,c#,linq,C#,Linq,我的一个函数中有以下代码 goodsQuery = db.Goods.Select(g => new { g.name, g.description, g.image, g.price }); 如果它是在方法中定义的,我会使用var类型。 但是当变量定义为类字段时,我必须使用什么类型 当然,IEnumerable不太合适。 尝试使用IEnumerable,但结果相同 是否要为此创建一个新类?您正在使用。这只能存在于函数的范围内。如果希望结果在属性中可用,则需要为此创建一个真正的类 不能声

我的一个函数中有以下代码

goodsQuery = db.Goods.Select(g => new { g.name, g.description, g.image, g.price });
如果它是在方法中定义的,我会使用var类型。 但是当变量定义为类字段时,我必须使用什么类型

当然,
IEnumerable
不太合适。 尝试使用
IEnumerable
,但结果相同

是否要为此创建一个新类?

您正在使用。这只能存在于函数的范围内。如果希望结果在属性中可用,则需要为此创建一个真正的类

不能声明字段、属性、事件或返回类型 指具有匿名类型的方法。同样,您不能声明 方法、属性、构造函数或索引器的形式参数,如 具有匿名类型的。传递匿名类型或集合的步骤 包含匿名类型的,作为方法的参数,您可以 将参数声明为类型对象。然而,这样做会挫败竞争对手 强打字的目的。如果必须存储或传递查询结果 在方法边界之外,考虑使用普通命名结构 或类而不是匿名类型

您正在使用一个。这只能存在于函数的范围内。如果希望结果在属性中可用,则需要为此创建一个真正的类

不能声明字段、属性、事件或返回类型 指具有匿名类型的方法。同样,您不能声明 方法、属性、构造函数或索引器的形式参数,如 具有匿名类型的。传递匿名类型或集合的步骤 包含匿名类型的,作为方法的参数,您可以 将参数声明为类型对象。然而,这样做会挫败竞争对手 强打字的目的。如果必须存储或传递查询结果 在方法边界之外,考虑使用普通命名结构 或类而不是匿名类型

如果使用C#4,如果创建类不可行,也可以使用
dynamic

但是在这里,类
好的
(奇怪的名字)似乎是一个更好的选择。

如果使用C#4,如果创建类不可行,您也可以使用
动态的


但是类
好的
(奇怪的名字)似乎是一个更好的选择。

“我应该为此创建一个新类吗?”是的!尝试使用IEnumerable。而且效果很好。是否存在任何隐患?是的,运行时没有动态类型。只有在必须时才使用
动态
。在大多数情况下,您应该使用类。@Novikoff
dynamic
的性能会差得多,因为您将在运行时编译代码,维护起来会困难得多,因为无论您还是未来的开发人员在使用该字段时都无法有效地了解项的实际属性,他们需要不断地查找查询以查看字段是什么,并且他们违反了标准命名约定(属性应以大写字母开头),这可能会导致键入错误,而这些错误在编译时不会被捕获,只有在运行时才会被捕获,失去Intellisense将花费您比节省更多的时间。“我应该为此创建一个新类吗?“是的!尝试使用IEnumerable。而且效果很好。是否存在任何隐患?是的,运行时没有动态类型。只有在必须时才使用
动态
。在大多数情况下,您应该使用类。@Novikoff
dynamic
的性能会差得多,因为您将在运行时编译代码,维护起来会困难得多,因为无论您还是未来的开发人员在使用该字段时都无法有效地了解项的实际属性,他们需要不断地查找查询以查看字段是什么,并且他们违反了标准命名约定(属性应以大写字母开头),这可能会导致键入错误,而这些错误在编译时不会被捕获,只有在运行时才会被捕获,失去Intellisense将花费您比节省更多的时间。