草庐IT

Collections

全部标签

c# - List<> Capacity 返回的项目多于添加的项目

List上有几个属性这似乎与列表中的项目数量有关-Capacity,Count(作为属性和方法存在)。这非常令人困惑,尤其是与Array相比那只有Length.我正在使用List.Capacity但它给出了意想不到的结果:Listfruits=newList();fruits.Add("apple");fruits.Add("orange");fruits.Add("banana");fruits.Add("cherry");fruits.Add("mango");Console.WriteLine("theListhas{0}itemsinit.",fruits.Capacity);

c# - TDD - 为迭代/使用集合的方法编写测试

作为TDD的新手,我正在努力编写处理集合的单元测试。例如,目前我正在尝试提出一些测试方案来从根本上测试以下方法intFind(Listlist,Predicatepredicate);该方法应返回列表list中与谓词predicate匹配的第一项的索引。到目前为止,我能够想出的唯一测试用例是当list不包含任何项目时-返回-1当list包含1个匹配predicate的项目时-返回0当list包含1个与predicate不匹配的项目时-返回-1当list包含2个都匹配predicate的项目时-返回0当list包含2个项目时,第一个匹配predicate-返回0等...但是正如您所见,这

c# - Unity,奇怪的调试

我添加了必要的using语句。在我的类的顶部使用System.Collections.Generic,编译器很乐意接受我对列表的使用,但是当我调试时,我遇到了一个非常奇怪的调试问题,因为当我展开我的列表时,我得到:未知类型'System.Collections.Generic.CollectionDebuggerView'1mscorlib。可能的原因有哪些?Google似乎没有帮助我...列表似乎确实在声明和空时声明了它们的信息,并且它们是用我创建的类定义的,但我从未在任何其他工具包(如XNA等)中看到过这个问题。我还应该提到这是通过MonoDevelop我看到了这个错误。谢谢。

c# - 从 BlockingCollection 中取出项目的正确方法是什么?

调用BlockingCollection.Take()时,集合的IsCompleted状态可能会在检查IsCompleted和调用Take()之间发生变化。MSDNDocumentation显示的示例只是捕获无效操作异常,但似乎必须有一种正确的方法来执行此类调用而不捕获异常(因为这会产生相当大的开销并且在代码中看起来不干净)。调用.Take()并避免无效操作异常的正确方法是什么?我的特定问题的简化版本:If(!blockingCollection.IsCompleted){//dosomestuffvalue=blockingCollection.Take();//ThrowsExce

c# - 没有锁的线程安全集合

我正在准备面试,遇到了以下问题。我试过了,但我找不到任何可以创建一个包含没有“锁”的线程安全集合的类的东西。如果知道任何解决方案,请提供帮助。创建一个派生自Object的C#类并实现以下方法:AddString–此方法应将给定字符串添加到内部集合ToString–覆盖此方法并返回一个逗号分隔的字符串,其中包含内部集合中的所有字符串要求:必须是线程安全的必须支持多个并发读者不得使用任何预先存在的线程安全集合奖励:不要使用任何类型的锁 最佳答案 这是一种实现集合无锁修改的方法,方法是处理本地副本,然后在检查竞争的同时尝试将其与全局集合进

c# - CancellationToken Cancel 不脱离 BlockingCollection

我有一个这样的取消标记staticCancellationTokenSourceTokenSource=newCancellationTokenSource();我有一个像这样的阻塞集合BlockingCollectionitems=newBlockingCollection();varitem=items.Take(TokenSource.Token);if(TokenSource.CancelPending)return;当我打电话TokenSource.Cancel();Take没有像它应该的那样继续。如果我将TryTake与民意调查一起使用,token会显示它被设置为已取消。

c# - 我在理解 IQueryable<T> 时遇到问题

所以我试图理解IQueryable.我正在阅读的教程建议使用它,但不确定为什么。该代码仅使用LINQtoSQL返回一些值。我过去做过很多次,但没有使用IQueryable为什么要将它与返回超过1个值的函数一起使用?这是我的代码:publicIQueryableGetItems(){returnfromitemindb.Itemswhereitem.IsActive==trueorderbyitem.ItemNumberselectitem;} 最佳答案 IQueryable将查询表示为表达式树,而不在服务器上对它求值。这使您可以在实

c# - 为什么不允许重新分配的集合初始值设定项?

我一直认为这两种方式都很好。然后做了这个测试并意识到它不允许重新分配:int[]a={0,2,4,6,8};工作正常,但不是:int[]a;a={0,2,4,6,8};这有什么技术原因吗?我想我会在这里询问它,因为这种行为是我直觉上所期望的。 最佳答案 首先,让我们正确理解这些术语。那不是集合初始值设定项。那是一个数组初始值设定项。集合初始值设定项始终遵循集合类型的构造函数。数组初始值设定项仅在局部或字段声明初始值设定项或数组创建表达式中才是合法的。您完全正确地注意到这是一个奇怪的规则。让我准确地描述它的怪异之处:假设您有一个方法M

c# - 如何检测 BindingList<T> 中项目属性的更改?

我有一个带有属性A和B的自定义类Foo。我想在数据绑定(bind)控件中显示它。我创建了一个类Foos:BindingList.为了更新Foos类的一些内部属性,我需要通知列表中项目的属性更改(我可以处理插入、删除等)。您将如何实现该功能?我应该从支持它的框架中的某个对象继承Foo吗?我想我可以创建事件以在发生变化时通知我,但这是应该的方式吗?或者框架中是否有某种模式可以帮助我? 最佳答案 Foo应该实现INotifyPropertyChanged和INotifyPropertyChanging接口(interface)。publi

c# - List<T>.Contains() 如何找到匹配项?

我有一个汽车对象列表Listcars=GetMyListOfCars();我想看看列表中是否有汽车if(cars.Contains(myCar)){}Contains使用什么来确定myCar是否在列表中。它是否对我的汽车对象执行“ToString()”。它是否使用Equals()方法,即gethashcode()?我知道我可以传递我自己的IEqualityComparer来强制我自己的实现,但只是想了解它默认情况下的作用。 最佳答案 直接来自MSDN-List.Contains:Thismethoddeterminesequalit