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 ステートメントから推測されます。myFruitListは であるため、List<string>e定義により文字列です。タイプは、FirstChar文字列からインデックス 0 で char を取得するという事実から推測されるため、char にバインドされます。

于 2012-12-18T10:18:41.407 に答える
0

スニペットでは、オブジェクトの初期化手法を使用しています。

この場合、コンパイラは、group by 句 ( string) の実装に使用しているオブジェクトの型を識別できます。そこから、このオブジェクト タイプに含まれるプロパティまたはフィールドを推測できます。

この情報を使用すると、オブジェクト型パブリック メンバー (プロパティまたはフィールド) の匿名型を使用してオブジェクトの初期化を行う方法を提供できます。

于 2012-12-18T10:29:31.133 に答える
0

これらは匿名型のパブリックな読み取り専用プロパティであるため、ご指摘のとおり、それらは割り当てられた型を取ります。

于 2012-12-18T10:17:35.790 に答える