サーチ…


備考

C#バージョン3.0は.Netバージョン3.5の一部としてリリースされました。このバージョンで追加された機能の多くは、LINQ(Language INtegrated Queries)をサポートしていました。

追加された機能のリスト:

  • LINQ
  • ラムダ式
  • 拡張メソッド
  • 匿名の種類
  • 暗黙的に型付けされた変数
  • オブジェクトとコレクションの初期化子
  • 自動的に実装されるプロパティ
  • 式ツリー

暗黙的に型付けされた変数(var)

varキーワードを使用すると、プログラマーはコンパイル時に暗黙的に変数を入力できます。 var宣言は、明示的に宣言された変数と同じ型を持ちます。

var squaredNumber = 10 * 10;
var squaredNumberDouble = 10.0 * 10.0;
var builder = new StringBuilder();
var anonymousObject = new
{ 
    One = SquaredNumber,
    Two = SquaredNumberDouble,
    Three = Builder
}

上記の変数の型はintdoubleStringBuilder型、および匿名型です。

var変数は動的に型指定されないことに注意することが重要です。 SquaredNumber = Builder 、あなたが設定しようとしているため、有効でないintのインスタンスにStringBuilder

言語統合クエリ(LINQ)

//Example 1
int[] array = { 1, 5, 2, 10, 7 };

// Select squares of all odd numbers in the array sorted in descending order
IEnumerable<int> query = from x in array
                         where x % 2 == 1
                         orderby x descending
                         select x * x;
// Result: 49, 25, 1

C#3.0のLINQサブセクションのwikipedia記事の例

例1では、SQLクエリと同様に見えるように設計されたクエリ構文を使用しています。

//Example 2
IEnumerable<int> query = array.Where(x => x % 2 == 1)
    .OrderByDescending(x => x)
    .Select(x => x * x);
// Result: 49, 25, 1 using 'array' as defined in previous example

C#3.0のLINQサブセクションのwikipedia記事の例

例2では、​​例1と同じ結果を得るためにメソッド構文を使用しています。

C#では、LINQクエリ構文はLINQメソッド構文の構文上の砂糖であることに注意することが重要です。コンパイラは、コンパイル時にクエリをメソッド呼び出しに変換します。いくつかのクエリは、メソッドの構文で表現する必要があります。 MSDNから - たとえば、指定された条件に一致する要素の数を取得するクエリを表現するには、メソッド呼び出しを使用する必要があります。

ラムダエクスプレッション

Lambda Expresionsは、暗黙的に型指定されたパラメータと戻り値を可能にする匿名メソッドの拡張です。それらの構文は匿名メソッドよりも冗長ではなく、関数型プログラミングスタイルに従います。

using System;
using System.Collections.Generic;
using System.Linq;
                    
public class Program
{
    public static void Main()
    {
        var numberList = new List<int> {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        var sumOfSquares = numberList.Select( number => number * number )
            .Aggregate( (int first, int second) => { return first + second; } );
        Console.WriteLine( sumOfSquares );
    }
}

上記のコードは、1から10までの数字の2乗の和をコンソールに出力します。

最初のラムダ式は、リスト内の数字を四角にします。 1つのパラメータしかないので、かっこは省略することができます。必要に応じてかっこを含めることができます。

.Select( (number) => number * number);

パラメータを明示的に入力してかっこを入力する必要があります。

.Select( (int number) => number * number);

ラムダボディは式であり、暗黙のリターンを持ちます。あなたが望むなら、文の本文を使うこともできます。より複雑なラムダには便利です。

.Select( number => { return number * number; } );

selectメソッドは、計算された値を含む新しいIEnumerableを返します。

2番目のラムダ式は、selectメソッドから返されたリスト内の数値を合計します。複数のパラメータがあるので、かっこが必要です。パラメータの型は明示的に型付けされていますが、これは必須ではありません。以下の方法は同等です。

.Aggregate( (first, second) => { return first + second; } );

これと同じように:

.Aggregate( (int first, int second) => first + second );

匿名の種類

匿名型は、型を最初に明示的に定義することなく、読み取り専用プロパティのセットを単一のオブジェクトにカプセル化する便利な方法を提供します。型名はコンパイラによって生成され、ソースコードレベルでは使用できません。各プロパティの型は、コンパイラによって推論されます。

newキーワードの後に​​中カッコ{ )を続けて、匿名の型を作成できます。中括弧の中で、以下のコードのようなプロパティを定義することができます。

var v = new { Amount = 108, Message = "Hello" };

また、匿名型の配列を作成することもできます。以下のコードを参照してください:

var a = new[] { 
    new { 
        Fruit = "Apple", 
        Color = "Red" 
    },
    new {
        Fruit = "Banana",
        Color = "Yellow"
    }
};

またはLINQクエリで使用します。

var productQuery = from prod in products
                   select new { prod.Color, prod.Price };


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow