Tag: 列表

是否可以在C#中使用无类型generics列表?

我正在尝试以下设计但没有成功: abstract class Foo { abstract T Output { get; } } class Bar { List Foos; } 我不喜欢使用数组列表,因为我必须使用不安全的转换来获取类型。 我想要输入Foo,以便“输​​出”不仅仅是一个对象,在这种情况下我也必须使用不安全的强制转换。 正如我的代码目前,我使用Foo无类型输出作为对象。

C ++ Vector就像C#中的类

C#中C ++ std::vector的类似类是什么? 我想要一个类,它内部保持一个内部数组,并支持在O(1)时间插入后面。

在C#中有一个List 的方法,比如在c ++中为vector 重新resize

当我在C ++中对vector使用resize(int newsize)时,意味着此vector的size设置为newsize ,索引在范围[0..newsize)运行。 如何在C#中为List做同样的事情? 更改List属性Capacity仅更改Capacity但使Count保持不变,此外索引仍在[0..Count)范围内。 请帮帮我。 PS想象一下我有一个vector tmp与tmp.size() == 5我不能参考tmp[9] ,但是当我然后使用tmp.resize(10)我可以参考tmp[9] 。 在C#中如果我有List tmp和tmp.Count == 5我不能引用tmp[9] ( IndexOutOfRangeException ),但即使我设置tmp.Capacity=10我也无法引用tmp[9]因为tmp.Count仍然是5.我想在C#中找到一些resize的类比。

基于对象变量搜索对象列表

我有一个对象列表。 这些对象有三个变量,ID,Name和value。 此列表中可能有很多对象,我需要根据ID或名称找到一个对象,然后更改该值。 例 class objec { public string Name; public int UID; public string value; } List TextPool = new List(); 如何在TextPool中找到名称为“test”的一个条目,并将其值更改为“Value”。 真正的程序有更多的搜索选项和需要更改的值,所以我不能只使用一个字典(虽然名称和UID或唯一标识符)。 任何帮助都会很棒

LIST AddRange抛出ArgumentException

我有一个特殊的方法偶尔崩溃与ArgumentException: Destination array was not long enough. Check destIndex and length, and the array’s lower bounds.: at System.Array.Copy(Array sourceArray, Int32 sourceIndex, Array destinationArray, Int32 destinationIndex, Int32 length, Boolean reliable) at System.Collections.Generic.List`1.CopyTo(T[] array, Int32 arrayIndex) at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection) at System.Collections.Generic.List`1.AddRange(IEnumerable`1 collection) 导致此崩溃的代码如下所示: List objects = new List(100); objects = FindObjects(someParam); objects.AddRange(FindObjects(someOtherParam); 根据MSDN,List 。AddRange()应根据需要自动调整大小: 如果新的Count(当前Count加上集合的大小)将大于Capacity,则通过自动重新分配内部数组以容纳新元素来增加List […]

通过接口枚举 – 性能损失

我与我的同事有一点争议(这非常接近圣战:))关于通过枚举VS通过枚举器访问列表的性能。 为了操作一些事实,我写了以下测试: static void Main(string[] args) { const int count = 10000000; var stopwatch = new Stopwatch(); var list = new List(count); var rnd = new Random(); for (int i = 0; i < count; i++) { list.Add( rnd.Next()); } const int repeat = 20; double indeces = 0; double forEach = 0; for (int […]

使用Linq和C#创建列表中项目的所有可能组合

我有一个类别表: Catid | Desciption 1 | Color 2 | Size 3 | Material 和一个类别项目表 Catid | Name 1 | Red 1 | Blue 1 | Green 2 | Small 2 | Med 2 l Large 3 | Cotton 3 | Silk 我需要遍历所有项目并将其显示在这样的标签中: Red Small Cotton Red Small Silk Red Med Cotton Red Med Silk Red […]

具有自动大小限制管理的ThreadSafe FIFO列表

我正在试图找出要使用的数据类型……基本上我想要一个线程安全的FIFO队列,并且一旦达到预先指定的限制就会自动丢弃足够多的项目。 嗯,实际上,也许更多的是列表,因为我不想要推入队列并从队列中弹出一个项目的整个概念,此时它已不再可用。 用例基本上是一个播放列表,我最多可以有5个即将到来的项目,当前正在播放的项目,然后是大约20个已播放的项目。 因此,为什么我猜它不能是一个队列,我将访问中间的一个项目作为“当前”项目。 当列表变得很大时,我宁愿不必手动管理扔掉旧物品……显然我可以自己写这些,但如果C#已经存在,我不想重新发明轮子。 我可以用什么想法?

从通用List 中删除项目

我有以下方法,我希望从我的集合中删除与产品ID匹配的项目。 似乎相当直接,但我得到一个例外。 基本上我的collections是不同步的。 那么从集合中删除项目的最佳方法是什么? public void RemoveOrderItem(Model.Order currentOrder, int productId) { foreach (var orderItem in currentOrder.OrderItems) { if (orderItem.Product.Id == productId) { currentOrder.OrderItems.Remove(orderItem); } } } exception详细信息:System.InvalidOperationException:集合已修改; 枚举操作可能无法执行

C#List vs IEnumerable 性能问题

嗨,假设这两种方法: private List GetProviderForType(Type type) { List returnValue = new List(); foreach (KeyValuePair provider in _objectProviders) { if ((provider.Key.IsAssignableFrom(type) || type.IsAssignableFrom(provider.Key)) && provider.Value.SupportsType(type)) { returnValue.Add(provider.Value); } } return returnValue; } private IEnumerable GetProviderForType1(Type type) { foreach (KeyValuePair provider in _objectProviders) if ((provider.Key.IsAssignableFrom(type) || type.IsAssignableFrom(provider.Key)) && provider.Value.SupportsType(type)) yield return provider.Value; } 哪一个更快? 当我看第一种方法时,我看到内存是为List分配的,我认为不需要它。 IEnumerable方法似乎对我来说更快。 例如,假设你打电话 int […]