C# select new T()和LINQ中select new T之间有区别吗
我今天一直在试验LINQ和DataTableC# select new T()和LINQ中select new T之间有区别吗,c#,linq,datatable,C#,Linq,Datatable,我今天一直在试验LINQ和DataTable var query = from row1 in table1.AsEnumerable() from row2 in table2.AsEnumerable() where (row1.Field<string>("a") == row2.Field<string>("b")) select new Foo
var query = from row1 in table1.AsEnumerable()
from row2 in table2.AsEnumerable()
where
(row1.Field<string>("a") == row2.Field<string>("b"))
select new Foo
{
Property1 = row1.Field<string>("Hey")
Property2 = row2.Field<string>("Ho")
};
得出了一个奇怪的结论,不管我选择new Foo还是new Foo,查询的效果都是一样的。我真的很想和代表们一起深入了解linq机制等,以清楚地理解这一点——但就目前而言,对于一个简单的人来说——有什么区别吗?如果有,这会是什么
编辑
这个问题在SOF上已经有了一些类似的答案,但对象初始值设定项并没有出现在脑海中。它也是针对LINQ提出的,在LINQ中,90%的web提示操作匿名类型不知道为什么,我发现使用具体类型,特别是Intellisense有一些好处。如果任何材料确实指定了具体类型,那么LINQ中的实现示例我只能找到没有括号的新Foo。对于LINQ构造,特别是对于初学者来说,可能很难找到初始化对象、委托、谓词等的内容-至少对我来说是这样,希望至少有人会发现问题和回答很有用。如果您使用了,并且没有将任何参数传递给构造函数,则可以省略括号。这两种说法是等价的
发件人:
如果对象创建表达式包含对象初始值设定项或集合初始值设定项,则可以省略构造函数参数列表和圆括号。省略构造函数参数列表和括号相当于指定空参数列表
这两个表达式在C中完全相同
new Foo
{
Property1 = row1.Field<string>("Hey")
Property2 = row2.Field<string>("Ho")
};
及
,而C神选择在C 3.0中这样做
在较大的示例中,select采用这种形式的表达式,由于对象初始值设定项表达式相同,因此较大的表达式也会产生相同的结果:这两个答案都很好。谢谢你,我真的很难决定接受哪一个-1快,或2约翰·斯基特的例子真的对我有意义。我能问一个小的澄清问题吗-我不知何故对查询中的属性1不了解?这是正常的吗?如果你有括号或没有括号,IntelliSense的工作原理应该是一样的。。。也许只是你的IDE太慢了?谢谢你,John,Intellisense可以工作,太棒了@Jakub-无意冒犯,也谢谢你的回答,我不知何故无法抗拒约翰·斯基特;可能重复的
new Foo()
{
Property1 = row1.Field<string>("Hey")
Property2 = row2.Field<string>("Ho")
};