使用字符串时,linq中是否需要新关键字

时间:2012-01-06 20:45:47

标签: c# linq

var listOfStates = from n in _storageStates
                   select n.tag;

如果n.tag是一个字符串,我是否需要使用new关键字。

var listOfStates = from n in _storageStates
                   select new {n.tag};

我想不会因为字符串是内置类型而不是类,但我不确定。

5 个答案:

答案 0 :(得分:6)

你经常看到的是:

var listOfStates = from n in _storageStates
                   select new { n.tag, n.foo };

这会创建一个anonymous type,这是一种以强类型但有些特别的方式将多个值组合在一起的有用方法。您可以使用以下单个值执行此操作:

var listOfStates = from n in _storageStates
                   select new { n.tag };

但通常会使更难的结果更容易使用而不是更容易。

请注意,匿名类型并不限于在LINQ中使用,尽管这可能是他们最常遇到的地方。请按照早期的MSDN链接获取更多信息。

答案 1 :(得分:2)

您不需要新关键字。您的第一个示例应该按预期工作。

答案 2 :(得分:2)

不,不需要new关键字,因为您实际上并未创建新对象。 new关键字可以在select语句中使用,但必须用作有效表达式。示例如下:

var listOfStates = from n in _storageStates
                   select new State(n.Tag);

new关键字也可用于使用以下语法创建匿名类型:

var listOfStates = from n in _storageStates
                   select new { n.Tag };

答案 3 :(得分:1)

不,除非您正在创建新对象(如果您选择的是多个字段),否则不需要:

// single field
var listOfStates = from n in _storageStates
                   select n.tag;

// multiple fields require, at least, an anonymous type
var listOfStatesAndCapitals = from n in _storageStates
                              select new { n.tag, n.capital };

答案 4 :(得分:0)

您通常在LINQ中使用new来创建匿名类型:http://msdn.microsoft.com/en-us/library/bb397696.aspx