我一直在阅读c#的LINQ功能,并遇到以下代码:
List<string> myFruitList = new List<string>() {
"apple", "plum", "cherry", "grape", "banana", "pear", "mango" ,
"persimmon", "lemon", "lime", "coconut", "pineapple", "orange"};
var results = from e in myFruitList
where e[0] == 'p' || e[0] == 'l'
group e by new {
FirstChar = e[0],
LengthGt5 = e.Length > 5 //no type mentioned for FirstChar and LengthGt5
};
我无法理解的是FirstChar
(char)和LengthGt5
(bool)字段没有提到类型。我很困惑。请清除疑虑。
提前致谢。
答案 0 :(得分:1)
没什么,只有Type Inference
答案 1 :(得分:1)
该类型是从Linq语句中推断出来的。由于myFruitList
是List<string>
,因此e
定义为字符串。 FirstChar
类型是从您从字符串中获取索引0处的char这一事实推断出来的,因此它必然是一个char。
答案 2 :(得分:0)
这些是匿名类型的公共只读属性,因此您指出,它们采用分配给它们的类型。
答案 3 :(得分:0)
在您的代码段中,您正在使用对象初始化技术。
在这种情况下,编译器能够识别您用于实现group by子句(string
)的对象的类型。从那里,它可以推断出该对象类型包含的属性或字段。
通过这些信息,它可以为您提供一种使用对象类型公共成员(属性或字段)的匿名类型进行对象初始化的方法。