0

我一直在阅读有关 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)字段没有提到类型。我很困惑。请解开疑惑。提前致谢。

4

4 回答 4

1

没什么,只是类型推断

于 2012-12-18T10:16:48.263 回答
1

类型是从 Linq 语句中推断出来的。因为myFruitListis a List<string>,e根据定义是一个字符串。该FirstChar类型是根据您从字符串中获取索引 0 处的字符这一事实推断出来的,因此它必然是一个字符。

于 2012-12-18T10:18:41.407 回答
0

在您的代码段中,您正在使用对象初始化技术。

在这种情况下,编译器能够识别您用于实现 group by 子句 ( string) 的对象的类型。从那里,它能够推断此对象类型包含的属性或字段。

有了这些信息,它可以为您提供一种使用匿名类型为对象类型公共成员(属性或字段)进行对象初始化的方法。

于 2012-12-18T10:29:31.133 回答
0

这些是匿名类型的公共只读属性,因此正如您所指出的,它们采用分配给它们的类型。

于 2012-12-18T10:17:35.790 回答