使用扩展方法进行集合初始化
当实例化任何实现 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