使用擴充套件方法進行集合初始化

當例項化任何實現 IEnumerable 的類並且具有名為 Add 的方法時,可以使用集合初始化語法,該方法採用單個引數。

在以前的版本中,此 Add 方法必須是要初始化的類的例項方法。在 C#6 中,它也可以是擴充套件方法。

public class CollectionWithAdd : IEnumerable
{
    public void Add<T>(T item)
    {
        Console.WriteLine("Item added with instance add method: " + item);
    }

    public IEnumerator GetEnumerator()
    {
        // Some implementation here
    }
}

public class CollectionWithoutAdd : IEnumerable
{
    public IEnumerator GetEnumerator()
    {
        // Some implementation here
    }
}

public static class Extensions
{
    public static void Add<T>(this CollectionWithoutAdd collection, T item)
    {
        Console.WriteLine("Item added with extension add method: " + item);
    }
}

public class Program
{
    public static void Main()
    {
        var collection1 = new CollectionWithAdd{1,2,3}; // Valid in all C# versions
        var collection2 = new CollectionWithoutAdd{4,5,6}; // Valid only since C# 6
    }
}

這將輸出:

使用例項新增方法新增的
專案 :1 新增例項新增方法的
專案 :2 新增例項新增方法的
專案 :3 專案新增副檔名新增方法:4
專案新增副檔名新增方法:5
專案新增副檔名新增方法:6