代码之家  ›  专栏  ›  技术社区  ›  Patrik Hägne

LinkedList(T)add方法

  •  1
  • Patrik Hägne  · 技术社区  · 16 年前

    ICollection(T) 接口已由显式实现 LinkedList(T)- 班级。相反,此集合具有AddFirst和AddLast方法(以及其他方法)。显式实现的方法映射到AddLast方法。这有一些缺点,我没有任何好处。两个主要缺点是:

    1. 不能对LinkedList(t)使用集合初始化,因为它需要Add方法。

    从未 显式实现接口成员,除非当您知道具体类型时它们根本没有意义。例如,如果要实现只读ICollection(T),那么Add方法应该显式实现(并且有效地隐藏)。

    另请注意:要解决第2个问题,您可以为LinkedList(T)-类创建一个扩展方法“Add”。

    1 回复  |  直到 16 年前
        1
  •  4
  •   Marc Gravell    16 年前

    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);
        }
    }
    

    编辑 )如果希望能够将“fluent”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;
    }
    
    推荐文章