[C# 6.0新機能] 拡張メソッドによるコレクションの初期化

C# 6.0では拡張メソッドを使用した独自のコレクション初期化メソッドを定義することができます。
例としてSampleクラスを以下のように作成します。

class Sample
{
    public string Name { get; set; }

}

// 拡張メソッドでAddを定義
// 初期値の先頭に"Hello,"が追加される
static class SampleExtensions
{
    public static void Add(this List list, string name)
        => list.Add(new Sample { Name = $"Hello, {name}."});
}

上記Sampleクラスのインスタンス生成時に初期値を与えると、初期値の前に”Hello,”が追加されます。

var smp = new List<Sample>()
{
    "Eric", "Paul", "Billy"
};

[C# 6.0新機能] 例外フィルター

C# 6.0ではcatch句にフィルターを使用することができるようになりました。
フィルターはwhenで指定します。
以下は、『例外発生時にMessageプロパティに「例外」というメッセージが含まれている場合のみ』をwhenでフィルターしています。

try
{
    throw new Exception("例外エラー発生");
}
catch (Exception e) when (e.Message.IndexOf("例外") > -1)
{
    // 例外メッセージの先頭が"例外"で始まっている場合に処理
    Console.WriteLine("エラー発生");
}
catch
{
    Console.WriteLine("その他の例外発生");
}

[C# 6.0新機能] インデックス初期化子

C# 6.0では、インデックス初期化子が追加されました。
これにより、Dictionaryは宣言と初期化を同時に行うことが可能です。
従来だと以下のように記述していました。

Dictionary<string, string> fruit = new Dictionary<string, string>();
fruit["Apple"] = "リンゴ";
fruit["Orange"] = "みかん";

C# 6.0では以下のように記述することが可能です。
変数名fruitを記述する必要はなくなり、「[“Key”] = Value,」という形式で初期化ができます。

Dictionary<string, string> fruit = new Dictionary<string, string>()
{
    ["Apple"] = "リンゴ",
    ["Orange"] = "みかん",
};

インデックス初期化子はDictionaryだけではなく、インデクサでも使用可能です。

public class Sample
{
    private string[] names = { "Eric", "Paul"};

    public string this[int x]
    {
        get
        {
            return names[x];
        }
        set
        {
            names[x] = value;
        }
    }
}


Sample smp = new Sample()
{
    // インデックス初期化子を利用した初期化
    [0] = "Jhon",
    [1] = "Alex",
};