Tag: 集合

合并ObservableCollection

我有两个ObservableCollections,我需要在一个ListView控件中一起显示它们。 为此,我创建了MergedCollection,它将这两个集合显示为一个ObservableCollection。 这样我就可以将ListView.ItemsSource设置为我的合并集合,并列出两个集合。 添加工作正常,但当我尝试删除项目时,显示未处理的exception: An unhandled exception of type ‘System.InvalidOperationException’ occurred in PresentationFramework.dll Additional information: Added item does not appear at given index ‘2’. MergedCollection的代码如下: public class MergedCollection : IEnumerable, INotifyCollectionChanged { ObservableCollection nodes; ObservableCollection connections; public MergedCollection(ObservableCollection nodes, ObservableCollection connections) { this.nodes = nodes; this.connections = connections; this.nodes.CollectionChanged += new NotifyCollectionChangedEventHandler(NetworkNodes_CollectionChanged); this.connections.CollectionChanged += new […]

如何从C#中的数组中获取随机值

可能重复: 访问列表中的随机项 我有一个数字数组,我想从这个数组中获取随机元素。 例如:{0,1,4,6,8,2}。 我想选择6并将此数字放在另一个数组中,新数组的值为{6,….}。 我使用random.next(0,array.length),但这给出了一个随机数的长度,我需要随机数组。 for (int i = 0; i < caminohormiga.Length; i++ ) { if (caminohormiga[i] == 0) { continue; } for (int j = 0; j < caminohormiga.Length; j++) { if (caminohormiga[j] == caminohormiga[i] && i != j) { caminohormiga[j] = 0; } } } for (int i = 0; i […]

List 没有实现SyncRoot!

每个人都使用很多List。 我需要迭代这个列表,所以我使用已知的SyncRoot模式。 最近我在这篇文章中注意到应该避免使用SyncRoot以支持“嵌入式”线程安全(每个方法将锁定私有对象而不使用SyncRoot属性暴露它)。 我能理解,部分我同意这一点。 问题是List 类没有实现SyncRoot属性,即使实现了ICollection接口,它暴露了SyncRoot属性。 我说这会使代码失效 List list = new List() list.SyncRoot; 给我以下编译器错误: 错误CS0117:’System.Collections.Generic.List’不包含’SyncRoot’的定义 …如果这是真的,我怎么能在迭代它时同步List 类型的公共属性?

找到两个词典之间的差异

是否有LINQ方法来查找两个通用字典之间的区别? 与此问题相同,但使用通用词典。

Linq用另一个集合中的值更新集合?

我有IQueryable baseList 并List someData 我想要做的是更新baseList中的一些项目中的属性。 对于someData中的每个项目,我想在baselist中找到相应的项目并更新项目的属性。 someOtherClass.someCode == baseList.myCode 我可以使用Linq进行某种类型的连接并设置baseList.someData + = someOtherClass.DataIWantToConcantenate。 我可以通过迭代来做到这一点,但是有一种花哨的Linq方式,我可以在几行代码中做到这一点吗? 感谢您在圣地亚哥的任何提示

ToArray()可以抛出exception吗?

虽然这个问题的答案非常好,但它意味着你应该锁定对List.ToArray()的锁定以实现并发。 这篇博文还暗示它可能会灾难性地失败(但很少)。 在枚举列表或其他集合时,我通常使用ToArray而不是锁定,以避免“集合已修改,枚举可能无法完成”exception。 这个答案和博客文章都对这个假设提出质疑。 List.ToArray()的文档没有列出任何exception,所以我一直认为它总是会完成(虽然可能是陈旧的数据),虽然从数据一致性的角度来看它不是线程安全的,但它是线程从代码执行的角度来看是安全的 – 换句话说,它不会抛出exception并且调用它不会破坏底层集合的内部数据结构。 如果这个假设不正确,那么虽然它从未引起过问题,但它可能是高可用性应用程序中的定时炸弹。 什么是明确的答案?

以只读方式返回集合

我在一个multithreading环境中有一个对象来维护一组信息,例如: public IList Data { get { return data; } } 我目前有return data; 由ReaderWriterLockSlim包装,以保护集合免受共享冲突。 但是,为了更加确定,我想将集合作为只读方式返回,这样调用代码就无法对集合进行更改,只能查看已经存在的集合。 这是可能吗?

如何查找字符串是否包含字符串列表的任何项目?

我有一个字符串和一个字符串列表: string motherString = “John Jake Timmy Martha Stewart”; 我想找到该字符串是否包含列表中的任何字符串,即: var children = new List{“John”, “Mike”, “Frank”}; 所以我想知道motherString是否包含来自孩子的一个项目,即。 ‘约翰’ 怎样才能解决这个问题?

使用NHibernate对延迟加载的集合进行分页

我读过这篇文章 ,其中Ayende表示NHibernate可以(与EF 4相比): 使用lazy =“extra”的集合 – Lazy extra意味着NHibernate适应您可能在集合之上运行的操作。 这意味着blog.Posts.Count不会强制加载整个集合,而是会从Posts中创建一个“select count(*),其中BlogId = 1”语句,而blog.Posts.Contains()同样会产生在单个查询中,而不是支付将整个集合加载到内存的价格。 集合filter和分页集合 – 这允许您在实体集合之上定义其他filter(包括分页!),这意味着您可以轻松浏览blog.Posts集合,而不必将整个内容加载到内存中。 所以我决定整理一个测试案例。 我创建了陈词滥调的Blog模型作为一个简单的演示,有两个类如下: public class Blog { public virtual int Id { get; private set; } public virtual string Name { get; set; } public virtual ICollection Posts { get; private set; } public virtual void AddPost(Post item) { if (Posts […]

ObservableCollection .Move(int,int)如何工作?

我似乎无法通过阅读MSDN上的ObservableCollection.Move(int oldIndex,int newIndex)的文档来解决这个问题: oldIndex类型:System.Int32从零开始的索引,指定要移动的项的位置。 newIndex类型:System.Int32从零开始的索引,指定项的新位置。 我不明白它是如何工作的。 使用newIndex会对项目产生什么影响? 我的假设是index >= newIndex的每个项目的index >= newIndex递减。 这个假设是否正确? 更重要的是,在MSDN上某处解释或描述了这种行为?