来自ICollection(T)接口的Add-method已由LinkedList(T)-类显式实现。该集合改为具有AddFirst-和AddLast-方法(以及其他方法)。显式实现的方法映射到AddLast方法。这有一些缺点,恕我直言,没有任何好处。两个主要缺点是:
我想到的方式是你应该从不明确地实现接口成员,除非在你知道具体类型时根本没有意义。例如,如果要实现只读ICollection(T),则应显式实现(并有效隐藏)Add方法。
是否有其他明确实施的方法示例应该不在框架中?
作为旁注:要解决2号问题,您可以为LinkedList(T)类创建扩展方法“Add”。
答案 0 :(得分:4)
Add
方法不明确,所以我满足于明确的实现......
Queue[<T>]
和Stack[<T>]
有类似行为。
对于其他(非收集)好奇的显性成员 - DbParameter.Precision
和DbParameter.Scale
怎么样。
重新解决两者之间的问题 - 你总是可以在ToLinkedList<T>
上写一个IEnumerable<T>
扩展方法。
或者 - AddRange<T>
扩展方法有很长的路要走......
static void Main()
{
var list = new LinkedList<int>();
list.AddRange(1, 2, 3, 4, 5);
}
static void AddRange<T>(this ICollection<T> list, params T[] values)
{
foreach (T value in values)
{
list.Add(value);
}
}
( EDIT )如果您希望能够将其用作单个表达式,也可以使用“流畅”API:
static void Main()
{
var list = new LinkedList<int>().AddRange(1, 2, 3, 4, 5);
// `list` is correctly a LinkedList<int> here
}
static TCollection AddRange<TCollection, TValue>(
this TCollection collection, params TValue[] values)
where TCollection : ICollection<TValue>
{
foreach (TValue value in values)
{
collection.Add(value);
}
return collection;
}