【问题标题】:Variable type needed or not变量类型是否需要
【发布时间】:2012-12-18 10:14:39
【问题描述】:

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

【问题讨论】:

    标签: c# linq types anonymous


    【解决方案1】:

    没什么,只是Type Inference

    【讨论】:

      【解决方案2】:

      类型是从 Linq 语句中推断出来的。因为myFruitListList&lt;string&gt;,所以e 根据定义是一个字符串。 FirstChar 类型是根据您从字符串中获取索引 0 处的字符这一事实推断出来的,因此它一定是字符。

      【讨论】:

        【解决方案3】:

        在您的 sn-p 中,您正在使用对象初始化技术。

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

          • 我知道有人会接我的,不过大喊大叫,更新了。
          • 删除了我的(现在没用的)评论:)
          猜你喜欢
          • 2021-01-15
          • 2011-10-27
          • 2017-11-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多