Tag: 集合

IDictionary 与Dictionary

在这里使用IDictionary有什么价值?

如何在C#中有效地从另一个中减去一个巨大的列表

我有一个很长的Ids(整数)列表,它代表了我数据库中当前的所有项目: var idList = GetAllIds(); 我还有另一个巨大的通用列表,其中包含要添加到数据库的项目: List itemsToAdd; 现在,我想删除ID已经在idList中的通用列表中的所有项目。 目前idList是一个简单的数组,我减去这样的列表: itemsToAdd.RemoveAll(e => idList.Contains(e.Id)); 我很确定它可以快得多,所以我应该为两个集合使用什么数据类型以及减去它们的最有效做法是什么? 谢谢!

C#对象到数组

使用reflection我有一个对象,我需要将其转换为可迭代的项目列表(类型未知,将是对象)。 使用Watch窗口我可以看到我的对象是某种类型的数组,因为它告诉我元素的数量,我可以爆炸树视图来查看元素本身。 首先,我需要检查传递的对象是某种数组(可能是List,可能是object []等)。 然后我需要遍历该数组。 但是,我无法进行类型转换。 这是我如何使用它(缩写): private static void Example(object instance, PropertyInfo propInfo) { object anArray = propInfo.GetValue(instance, null); ArrayList myList = anArray as ArrayList; foreach (object element in myList) { // etc } } 我尝试了各种不同的演员阵容。 以上不会引发exception,但是当anArray实际存在且包含项目时,mylist为null。 保存的实际实例是强类型List ,但如果需要,可以采用有限的表单子集。 但是练习的重点是这个Example()方法不知道属性的基本类型。

如何确定类型是否是一种集合?

我试图确定运行时类型是否是某种集合类型。 我在下面的工作,但似乎很奇怪,我必须将我认为的数据类型命名为数组,就像我所做的那样。 在下面的代码中,通用逻辑的原因是因为,在我的应用程序中,我希望所有集合都是通用的。 bool IsCollectionType(Type type) { if (!type.GetGenericArguments().Any()) return false; Type genericTypeDefinition = type.GetGenericTypeDefinition(); var collectionTypes = new[] { typeof(IEnumerable), typeof(ICollection), typeof(IList), typeof(List) }; return collectionTypes.Any(x => x.IsAssignableFrom(genericTypeDefinition)); } 我如何重构此代码以使其更智能或更简单?

在c#中使用Linq匹配2个集合之间的元素

我有一个关于如何在linq中执行常见编程任务的问题。 假设我们已经做了不同的集合或数组。 我想做的是匹配数组之间的元素,如果有匹配,那么用该元素做一些事情。 例如: string[] collection1 = new string[] { “1”, “7”, “4” }; string[] collection2 = new string[] { “6”, “1”, “7” }; foreach (string str1 in collection1) { foreach (string str2 in collection2) { if (str1 == str2) { // DO SOMETHING EXCITING/// } } } 这显然可以使用上面的代码完成,但我想知道是否有一个快速和简洁的方法,你可以用LinqtoObjects做到这一点? 谢谢!

WPF:将Collection与Collection绑定到带有组的ListBox

有时候WPF对我来说太复杂了。 我的“Window1”collections了一组“群组”。 “Group”是一个包含“Person”集合的类。 最后,这应该是联系人列表。 我只想在ListBox中显示其人员组,其中列表组的组名称等于我的类“Groups”的Name属性。 我试过将CollectionViewSource绑定到“Collection”。 这些组显示正确,但列表中的项目等于组名称。 因此每个组只有一个项目:组名。 这里的许多示例显示仅具有一个集合的项目分组。 我能做的是将组名设置为“人物”的属性。 但后来我无法计算(这是非常必要的): – 每组中有多少人 – 有多少人拥有“状态”“在线”。 我在“Group”类中使用linq来计算它。 感谢您提供帮助我入门的任何建议。

IList 和IReadOnlyList

如果我有一个需要参数的方法, 拥有Count属性 有一个整数索引器(get-only) 这个参数的类型应该是什么? 我会在.NET 4.5之前选择IList ,因为没有其他可索引的集合接口,并且数组实现它,这是一个很大的优点。 但.NET 4.5引入了新的IReadOnlyList接口,我也希望我的方法能够支持它。 如何在不违反DRY等基本原则的情况下编写此方法以支持IList和IReadOnlyList ? 编辑 :丹尼尔的回答给了我一些想法: public void Foo(IList list) => Foo(list, list.Count, (c, i) => c[i]); public void Foo(IReadOnlyList list) => Foo(list, list.Count, (c, i) => c[i]); private void Foo( TList list, int count, Func indexer) where TList : IEnumerable { // Stuff } 编辑2:或者我可以接受一个IReadOnlyList并提供这样的帮助: public static […]

通过List 删除不需要的对象的最简单方法是什么?

在我的应用程序中,_collection是一个List,我需要从中删除所有与条件不匹配的User对象 。 但是,以下代码在其第二次迭代中获取无效操作错误,因为_collection本身已更改: foreach (User user in _collection) { if (!user.IsApproved()) { _collection.Remove(user); } } 我可以创建另一个List集合并来回复制它们,但后来我遇到了非克隆引用类型等问题。 有没有办法比将_collection复制到另一个另一个List变量更优雅?

线程安全集合,没有订单,也没有重复

我需要一个线程安全的集合来保存没有重复的项目。 ConcurrentBag允许HashSet , HashSet不是线程安全的。 在.NET Framework 4.5中是否有这样的集合?

无法在foreach循环中处理DataTable

在我的Dispose方法中,我将处理数据集所具有的所有内容,如下所示: foreach (DataTable myTable in this.Tables) { myTable.Dispose(); } 这里this.Tables是public DataTableCollection Tables { get; } public DataTableCollection Tables { get; } 我有大约56张桌子。桌子接近这个电话。 它可以很好地用于几个表但突然抛出: System.InvalidOperationException:集合修改错误 我不确定为什么会这样。 我试图搜索这个exception很多,但我不能理解为什么它在我的应用程序中破坏。 可能是因为线程? 或者我需要将其转换为列表?