[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では、インデックス初期化子が追加されました。
これにより、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",
};

[C# 6.0新機能] nameof演算子

変数名やプロパティ名、クラス名などを文字列として取得したい場合があります。
これを実現するためにC# 6.0ではnameof演算子が追加されました。

public class Sample
{        
    private int _width = 20;
    private const string FIXED_STR = "固定文字列";

    private string SayHello(string name) => $"Hello {name}";

    public string FirstName { get; set; }

    public void PrintNames()
    {
        Console.WriteLine(nameof(Sample));      // クラス名
        Console.WriteLine(nameof(_width));      // フィールド
        Console.WriteLine(nameof(FIXED_STR));   // 定数
        Console.WriteLine(nameof(FirstName));   // メソッド
    }
}