使用擴充套件方法進行集合初始化
當例項化任何實現 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