我不明白为什么SortedDictionary的性能在设置和检索值方面比Dictionary慢大约5倍。我预计插入和删除会更慢,但不会更新或检索。我已经测试了.Net3.5和.Net4.0版本的编译代码。预先计算了一组随secret钥,以确保随机变化不会导致随机访问的差异。以下是经过测试的场景。使用[key]访问器顺序更新每个值使用[key]访问器顺序访问每个值使用TryGetValue顺序访问每个值使用[key]访问器随机访问每个值使用TryGetValue随机访问每个值有人知道性能差异的原因吗?如果我做错了什么或愚蠢的事情请指出。示例代码:只需将Dictionary切换为Sorte
如果我向字典中添加值,然后在代码中的某处添加值,我想使用以下方法将该字典转换为数组:myDictionary.Values.ToArray()数组会按照我输入的顺序出来吗?还是在某个阶段排序? 最佳答案 如果你想对值进行排序(在键上),那么你应该使用SortedDictionary或SortedList对于普通的字典,值的顺序是依赖于实现的,但您也可以假设它是随机的。输入顺序丢失。 关于c#-Dictionary.Values.ToArray()的顺序是什么?,我们在StackOverf
查看System.Collections.Generic.Dictionary,它清楚地实现了ICollection>,但没有所需的“voidAdd(KeyValuePairitem)”功能。这也可以在尝试初始化Dictionary时看到像这样:privateconstDictionaryPropertyIDs=newDictionary(){newKeyValuePair("muh",2)};失败了Nooverloadformethod'Add'takes'1'arguments为什么会这样? 最佳答案 预期的API是通过两个参数
哈希表具有同步根属性,但通用字典没有。如果我有这样做的代码:lock(hashtable.Syncroot){....}如果我要删除哈希表并更改为通用词典,我该如何复制它? 最佳答案 如果您严格要求兼容性,那么Bryan是正确的。这是在字典之上维护当前语义的最佳方式。虽然扩展了它。SyncRoot属性没有直接添加到通用字典的原因是它是一种危险的同步方式。它只比非常危险且容易出现死锁的“lock(this)”好一点点。这里有几个链接说明了为什么这是不好的。http://blogs.msdn.com/bclteam/archive/20
我只是想建立一个View,但我收到以下错误:System.InvalidOperationException:Themodelitempassedintothedictionaryisnull,butthisdictionaryrequiresanon-nullmodelitemoftype'System.DateTime现在,我知道为什么会出现这种情况,数据库中的特定字段是空值,但它应该是空值,因为这是稍后编辑的内容。这是我的代码:ActionpublicActionResultView(Int64?Id){ModelContainerctn=newModelContainer();
在下面的示例代码中,我得到了这个错误:ElementTestSerializeDictionary123.Customer.CustomPropertiesvomTypSystem.Collections.Generic.Dictionary`2[[System.String,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089],[System.Object,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934
如何测试通用字典对象以查看它是否为空?我想按如下方式运行一些代码:while(reportGraphs.MoveNext()){reportGraph=(ReportGraph)reportGraphs.Current.Value;report.ContainsGraphs=true;break;}reportGraph对象的类型是System.Collections.Generic.Dictionary运行此代码时,reportGraphs字典为空,MoveNext()立即抛出NullReferenceException。如果有更高效的方法来处理空集合,我不想在block周围放置tr
我有一个表,其中2列定义为varchar(50):Column1和Column2。我想返回的字典其中每一行都在字典中,其中Column1是键,Column2是值。这是我的:publicDictionaryLoadAllTheDataFromDB(){using(MyDCTheDC=newMyDC()){return(fromcinTheTableselectnewDictionary(){//stuckhere}).FirstOrDefault();}}如何让字典充满? 最佳答案 试试这个:vardict=TheTable.Sele
将对象添加到.NET时System.Collections.Generic.Dictionaryclass内部存储了key的hashcode,用于后面的比较。当hashcode在初始插入字典后发生变化时,它通常会变得“不可访问”,并且当存在检查(即使使用相同的引用)返回false时可能会让用户感到惊讶(下面的示例代码)。GetHashCode文档说:TheGetHashCodemethodforanobjectmustconsistentlyreturnthesamehashcodeaslongasthereisnomodificationtotheobjectstatethatdet
在这里使用IDictionary的值(value)是什么? 最佳答案 使用接口(interface)的值(value)始终相同:切换到另一个后端实现时,您不必更改客户端代码。请考虑稍后分析您的代码表明哈希表实现(在Dictionary类中使用)不适合您的任务,二叉搜索树的性能会更好。如果您已经编码到一个接口(interface),那么切换实现就很简单了。但是,如果您使用的是具体类,则必须在更多地方更改更多代码。=>这会花费时间和金钱。 关于c#-IDictionary与Dictionar