是否需要变量类型

时间:2012-12-18 10:14:39

标签: c# linq types anonymous

我一直在阅读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 个答案:

答案 0 :(得分:1)

没什么,只有Type Inference

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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