Tag: collections

有效地向ObservableCollection添加一系列值

我有一个ObservableCollection项目绑定到我的视图中的列表控件。 我有一种情况,我需要在集合的开头添加一大块值。 Collection.Insert文档将每个插入指定为O(n)操作,每个插入也生成一个CollectionChanged通知。 因此,我希望在一次移动中插入整个范围的项目,这意味着只有一个基础列表的随机播放,并且希望有一个CollectionChanged通知(可能是“重置”)。 Collection不会公开任何执行此操作的方法。 List具有InsertRange() ,但是IList , Collection通过其Items属性公开不会。 有没有办法做到这一点?

如何隐藏界面的某些成员

我想创建一个实现ICollection的自定义集合。 但我不想像Clear方法那样暴露ICollection一些成员。 怎么做到这一点?

c#inheritancegenerics集合和序列化

设置: class Item { private int _value; public Item() { _value = 0; } public int Value { get { return _value; } set { _value = value; } } } class ItemCollection : Collection { private string _name; public ItemCollection() { _name = string.Empty; } public string Name { get {return _name;} set {_name […]

具有唯一键和值的C#字典类型

我想知道C#中是否有内置类型,就像’Dictionary’,但TKey和TValue都必须是唯一的。 例如:: d.Add(1, “1”); d.Add(2, “1”); // This would not be OK because “1” has already been used as a value. 我知道这有点奇特,但似乎因为BCL中有大约10亿个集合类型,它可能存在。 有任何想法吗?

System.InvalidOperationException:集合已被修改

我在通过队列枚举时遇到以下exception: System.InvalidOperationException:集合已被修改; 枚举操作可能无法执行 这是代码摘录: 1: private bool extractWriteActions(out List channelWrites) 2: { 3: channelWrites = new List(); 4: foreach (TpotAction action in tpotActionQueue) 5: { 6: if (action is WriteChannel) 7: { 8: channelWrites.Add((WriteChannel)action); 9: lock(tpotActionQueue) 10: { 11: action.Status = RecordStatus.Batched; 12: } 13: } 14: } 15: return (channelWrites.Count > 0); 16: } […]

readonly关键字不会使List ReadOnly?

我在公共静态类中有以下代码: public static class MyList { public static readonly SortedList<int, List> CharList; // …etc. } ..但即使使用readonly我仍然可以从另一个类添加项目到列表: MyList.CharList[100] = new List() { new myObj(30, 30) }; 要么 MyList.CharList.Add(new List() { new myObj(30, 30) }); 有没有办法让事物只读而不改变CharList的实现(它会打破一些东西)? 如果我必须改变实现(使其不可更改),那么最好的方法是什么? 我需要它是List ,所以ReadOnlyCollection不会这样做

列表容量返回的项目多于添加的项目

List上有几个属性似乎与列表中的项目数相关 – Capacity , Count (作为属性和方法存在)。 与仅具有Length Array相比,这非常令人困惑。 我正在使用List.Capacity但它会产生意想不到的结果: List fruits = new List(); fruits.Add(“apple”); fruits.Add(“orange”); fruits.Add(“banana”); fruits.Add(“cherry”); fruits.Add(“mango”); Console.WriteLine(“the List has {0} items in it.”, fruits.Capacity); 当我运行它时,控制台显示: 列表中有4个项目。 我不明白为什么它显示8的Capacity ,当我只添加5项。

在处理只读List 成员时,我应该如何使用属性

当我想在我的课外制作一个只读的值类型时,我这样做: public class myClassInt { private int m_i; public int i { get { return m_i; } } public myClassInt(int i) { m_i = i; } } 我可以做些什么来使List类型只读(因此它们不能在我的类之外添加/删除元素)? 现在我只是宣布公开: public class myClassList { public List li; public myClassList() { li = new List(); li.Add(1); li.Add(2); li.Add(3); } }

LINQ可以在订购集合时使用二进制搜索吗?

我可以以某种方式“指示”LINQ在我尝试搜索的集合被订购时使用二进制搜索。 我正在使用ObservableCollection ,填充有序数据,我正在尝试使用Enumerable.First() 。 在我的谓词中,我按照我的集合排序的字段的值进行过滤。

多值字典?

有人知道MultiValueDictionary的良好实现吗? 基本上,我想要一些允许每个键有多个值的东西。 我希望能够做类似的事情 dict.Add(key, val); 如果密钥尚不存在,它将添加它,如果它存在,它将只添加该密钥的另一个值。 我只是要迭代它,所以我真的不关心其他检索方法。