标签: addrange

C#中的HashSet是否有AddRange等效项?

使用列表,您可以:

list.AddRange(otherCollection);
Run Code Online (Sandbox Code Playgroud)

HashSet中没有添加范围方法.将另一个集合添加到HashSet的最佳方法是什么?

c# collections hashset addrange

279
推荐指数
3
解决办法
6万
查看次数

155
推荐指数
5
解决办法
10万
查看次数

如何将一系列项添加到IList变量

没有AddRange()办法IList<T>.

如何在IList<T>不迭代项目和使用Add()方法的情况下将项目列表添加到a ?

c# collections list addrange

64
推荐指数
4
解决办法
5万
查看次数

List <T> .AddRange实现次优

分析我的C#应用​​程序表明花费了大量时间List<T>.AddRange.使用Reflector查看此方法中的代码表明它调用的List<T>.InsertRange是这样实现的:

public void InsertRange(int index, IEnumerable<T> collection)
{
    if (collection == null)
    {
        ThrowHelper.ThrowArgumentNullException(ExceptionArgument.collection);
    }
    if (index > this._size)
    {
        ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.index, ExceptionResource.ArgumentOutOfRange_Index);
    }
    ICollection<T> is2 = collection as ICollection<T>;
    if (is2 != null)
    {
        int count = is2.Count;
        if (count > 0)
        {
            this.EnsureCapacity(this._size + count);
            if (index < this._size)
            {
                Array.Copy(this._items, index, this._items, index + count, this._size - index);
            }
            if (this == is2)
            {
                Array.Copy(this._items, 0, this._items, index, index);
                Array.Copy(this._items, (int) (index + count), …
Run Code Online (Sandbox Code Playgroud)

.net c# performance list addrange

20
推荐指数
1
解决办法
9242
查看次数

无法在C#中将一个列表附加到另一个列表...尝试使用AddRange

嗨,我正在尝试将1个列表附加到另一个列表中.我之前使用它AddRange()但它似乎没有在这里工作...这是代码:

IList<E> resultCollection = ((IRepository<E, C>)this).SelectAll(columnName, maxId - startId + 1, startId);                
IList<E> resultCollection2 = ((IRepository<E, C>)this).SelectAll(columnName, endId - minId + 1, minId);
resultCollection.ToList().AddRange(resultCollection2);
Run Code Online (Sandbox Code Playgroud)

我做了调试以检查结果,这是我得到的:resultCollection计数为4 resultCollection2的计数为6,并且在添加范围后,resultCollection仍然只有4,当它应该有10的计数.

谁能看到我做错了什么?任何帮助表示赞赏.

谢谢,
马特

c# asp.net-mvc list repository addrange

8
推荐指数
1
解决办法
1万
查看次数

List.AddRange与IEnumerable <T>参数不起作用?

我有以下场景,我想在列表中添加一些项目...

List<T> items = new List<T>();
IEnumerable<T> addItems = someCollection.Where(...);
items.AddRange(addItems);
Run Code Online (Sandbox Code Playgroud)

使用此代码,列表中不会添加任何项目,但如果我在Linq语句之后添加.ToList(),则会正确添加项目.我想这是由于延迟执行,但我想如果List.AddRange函数接受一个I​​Enumerable,它将枚举要添加的项目.

有人可以清楚为什么会这样吗?

c# ienumerable list addrange deferred

8
推荐指数
1
解决办法
2万
查看次数

c#Linq`List <Interface> .AddRange`方法不起作用

我有一个定义如下的接口:

public interface TestInterface{
    int id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

两个实现该接口的Linq-to-SQL类:

public class tblTestA : TestInterface{
    public int id { get; set; }
}

public class tblTestB : TestInterface{
    public int id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有来自tblTestA和tblTestB的数据库记录填充的IEnumerable列表a和b

IEnumerable<tblTestA> a = db.tblTestAs.AsEnumerable();
IEnumerable<tblTestB> b = db.tblTestBs.AsEnumerable();
Run Code Online (Sandbox Code Playgroud)

但是,不允许以下内容:

List<TestInterface> list = new List<TestInterface>();
list.AddRange(a);
list.AddRange(b);
Run Code Online (Sandbox Code Playgroud)

我必须做如下:

foreach(tblTestA item in a)
    list.Add(item)

foreach(tblTestB item in b)
    list.Add(item)
Run Code Online (Sandbox Code Playgroud)

有什么我做错了吗?谢谢你的帮助

c# linq addrange

7
推荐指数
2
解决办法
5272
查看次数

如何在自定义BindingList上提高AddRange方法的性能?

我有一个自定义BindingList,我想为其创建一个自定义的AddRange方法.

public class MyBindingList<I> : BindingList<I>
{
    ...

    public void AddRange(IEnumerable<I> vals)
    {
        foreach (I v in vals)
            Add(v);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是大型集合的性能很糟糕.我正在调试的情况是尝试添加大约30,000条记录,并花费了不可接受的时间.

在线查看此问题之后,似乎问题在于使用Add每次添加时调整数组大小.我认为这个答案总结为:

如果您使用Add,它会根据需要逐渐调整内部数组的大小(加倍)

我可以在自定义AddRange实现中做什么来指定BindingList需要根据项目数量调整大小,而不是让它在每个项目添加时不断重新分配数组?

c# bindinglist addrange

7
推荐指数
2
解决办法
3516
查看次数

ToCharArray等效于List <string>

如何将字符串拆分为List?我正在寻找相当于ToCharArray的东西,而是让它成为一个List.

string data = "ABCDEFGHIJ1fFJKAL";
List<string> datalist = new List<string>();
datalist.AddRange(new List<string>{"A","B","C"});
Run Code Online (Sandbox Code Playgroud)

你如何转换数据,以便AddRange接受?

c# arrays addrange

5
推荐指数
2
解决办法
1万
查看次数

在 C# 中以 O(1) 扩展列表 (AddRange)

我试图在 C# 中找到一个解决方案来扩展O(1).

List的AddRange()方法当然是一个O(n)操作。这应该是 LinkedList 支持的东西,但 LinkedList 没有像这样的方法AddRangeLast(),并试图像这样组合 LinkedLists:

LinkedList<int> l1 = new LinkedList<int>(new[] { 1, 2, 3 });
LinkedList<int> l2 = new LinkedList<int>(new[] { 11, 12, 13 });
l1.AddLast(l1.First);

Run Code Online (Sandbox Code Playgroud)

抛出这个异常:

System.InvalidOperationException: 'LinkedList 节点已经属于 LinkedList。'

有没有人知道在O(1)不自己实现 LinkedList 和 LinkedListNode 的情况下将列表添加到列表中的方法?

c# linked-list list time-complexity addrange

5
推荐指数
1
解决办法
312
查看次数