有没有可能创build构造函数扩展方法? 怎么样?

有没有可能添加一个构造函数的扩展方法? 我想添加一个List <T>构造函数来从给定的部分填充的缓冲区中接收特定数量的字节(不需要仅复制相关字节等的开销):

... public static List<T>(this List<T> l, T[] a, int n) { for (int i = 0; i < n; i++) l.Add(a[i]); } ... 

所以用法是:

 List<byte> some_list = new List<byte>(my_byte_array,number_of_bytes); 

我已经添加了一个AddRange扩展方法:

 public static void AddRange<T>(this List<T> l, T[] a, int n) { for (int i = 0; i < n; i++) l.Add(a[i]); } 

我也想做一个构造函数。 可能吗 ? 如果是 – 如何?

不,但是如果你改变你的AddRange签名来返回列表实例,那么你至less可以这样做

 var list = new List<int>().AddRange(array, n); 

无论如何,这个imho可能比重载构造函数更清晰。

SWeko的答案基本上是正确的,虽然他链接到的文章是关于扩展属性而不是扩展构造函数。

我们在扩展属性的同时也做了扩展构造函数的粗略devise; 他们将是一个很好的工厂模式的语法糖。 但是,他们从来没有超越devise阶段。 该function虽然很好,但并不是真正必要的,并且不能启用任何令人敬畏的新场景。

如果你有一个真正令人敬畏的问题,扩展构造函数将解决,我很乐意听到更多的细节。 我们得到的现实世界反馈越多,我们就越能评估我们每年获得的数百个不同functionbuild议的相对优点。

一句话 – 不。 看看这个一些解释。

他们从C#3function列表中删除,然后从C#4function列表中删除,我们只能希望他们能够制作C#5function,但我不太乐观。

我知道这是一个凹凸,只是想指出你可以inheritanceList类,并做这样的事情:

 class List<T> : System.Collections.Generic.List<T> { public List(T[] a, int n) : base() { AddRange(a, n); } }