问题标签 [keynotfoundexception]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
79956 浏览

c# - 处理 KeyNotFoundException 的最佳方法

我正在使用字典来查找我正在处理的程序。我通过字典运行了一堆键,我希望一些键没有值。我抓住KeyNotFoundException它发生的地方,并吸收它。所有其他异常将传播到顶部。这是处理这个问题的最好方法吗?或者我应该使用不同的查找?字典使用一个 int 作为它的键,一个自定义类作为它的值。

0 投票
7 回答
6831 浏览

c# - C# 字典<> 缺少键

当我执行 val = dict["nonexistent key"] 时,我得到 System.Collections.Generic.KeyNotFoundException 有没有办法让我的字典以键作为参数调用成员函数来生成值?

-edit- 也许我应该更具体。我想自动调用一个成员函数来做它需要为该键创建正确的值。在这种情况下,它会在我的数据库中创建一个条目,然后将其独特的句柄返回给我。我将在下面发布我的解决方案。

0 投票
2 回答
2459 浏览

c# - C# 异常:字典中不存在键

我有一个小问题。有时,当我尝试调用以下代码时,remove 方法会引发异常,并显示消息“字典中不存在密钥”。

ARPHostEntry 类是一个简单的类,它包含一个 IP 地址和一个关联的 MAC 地址,其中该类中的两个字段都是只读的。该程序是多线程的,但我每次使用时都会锁定此类中的字典。

我很无奈。为什么会出现这种异常?

最诚挚的问候

编辑

为了澄清,接受的答案是正确的。生成的异常是跨线程访问我的字典引起的问题。

0 投票
1 回答
371 浏览

c# - KeyNotFoundException,但调试时没有

我一直在构建一个扩展库,并且我使用了在http://www.extensionmethod.net上找到的一个很好的扩展方法来包含。在我的单元测试中(使用 NUnit 1.5.2),我遇到了一个有趣的问题。首先,让我们看一下代码:

该函数的作用是接收一个 TSource 类型的 IEnumerable,并将项目转入字典,并使用您定义的任何函数聚合项目。我的样本数据集是一个人数组(在一个名为 Person 的类型中)。

最后,我们进行测试:

在这个测试用例中返回的是一个 Dictionary> 实例。该布尔值是 IsMale 分组依据的结果,在我们的示例数据中,正确返回 2 个项目,true 和 false。内部字典有一个年龄键和一个计数值。在我们的测试数据中,organized[true][30] 反映了集合中所有 30 岁的男性。

问题不在于枢轴函数本身,而是由于某种原因,当我们通过 NUnit 测试运行器和 Resharper 的单元测试运行器运行它时,测试失败,报告行“int count = Organized[true][ 30];"。当我们调试这个测试时,它正确地返回了值 3(在我们的样本数据中,我们有 3 个 30 岁的男性)。

有什么想法吗?

0 投票
3 回答
945 浏览

c# - 使用以前从密钥集合中检索到的密钥时出现 KeyNotFoundException?

我有以下代码,由于某种原因,我得到了 KeyNotFoundException,即使我使用的是我在上面检索了几行的密钥。有谁知道这不起作用的情况?我难住了。BTW 'SchemaElementType 是一个枚举。

0 投票
2 回答
1081 浏览

c# - 通过辅助方法动态调用 Html.ValidationSummary() 时出现 KeyNotFound 异常

我的视图中有一个辅助方法,它动态呈现整个表单。现在我想添加对 Asp.Net MVC RC 2 中可用的客户端验证的支持。

以下是我用来将验证摘要字段呈现到表单上的代码。

当代码达到这一点时,我得到以下错误。

Message="给定的键不在字典中。" Source="System" StackTrace:在 System.Collections.Generic.SortedDictionary 的 System.ThrowHelper.ThrowKeyNotFoundException()2.get_Item(TKey key) at System.Web.Mvc.Html.ValidationExtensions.ValidationSummary(HtmlHelper htmlHelper, Boolean excludePropertyErrors, String message, IDictionary2 htmlAttributes) 在 System.Web.Mvc.Html.ValidationExtensions.ValidationSummary(HtmlHelper htmlHelper, String message, IDictionary`2 htmlAttributes) 在 D:\EBS\Project.Fusion 的 Fusion.UI.MvcWebUX.Helper.FormGenerator.GenerateFormValidation() \Fusion.UI.MvcWebUX\Helper\FormGenerator.cs:D:\EBS\Project.Fusion\Fusion.UI.MvcWebUX\Helper\FormGenerator.cs 中 Fusion.UI.MvcWebUX.Helper.FormGenerator.GenerateForm() 的第 88 行:D:\EBS\Project.Fusion\Fusion.UI.MvcWebUX\Helper\FormGenerator.cs 中 Fusion.UI.MvcWebUX.Helper.FormGenerator.RenderForm(ViewPage viewPage) 的第 70 行:ASP.views_shared_autoview_aspx.__RenderContent2 的第 60 行( HtmlTextWriter __w, Control parameterContainer) 在 d:\EBS\Project.Fusion\Fusion.UI.MvcWebUX\Views\Shared\AutoView.aspx: System.Web.UI.Control 的第 7 行。RenderChildrenInternal(HtmlTextWriter writer, ICollection children) at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) at System.Web.UI.Control.Render(HtmlTextWriter writer) at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter 适配器)在 System.Web.UI.Control.RenderControl(HtmlTextWriter writer)在 System.Web.UI.Control.RenderControl(HtmlTextWriter writer,ControlAdapter 适配器)在 ASP.views_shared_fusion_master.__Render__control1(HtmlTextWriter __w,Control parameterContainer)在 d: \EBS\Project.Fusion\Fusion.UI.MvcWebUX\Views\Shared\Fusion.Master:System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer,ICollection children)的第 74 行,位于 System.Web.UI.Control.RenderChildren (HtmlTextWriter 作家)在 System.Web.UI.Control。在 System.Web.UI.Control.RenderControl(HtmlTextWriter writer,ControlAdapter 适配器)在 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer,ControlAdapter 适配器)在 System.Web.UI.Control.RenderControl( HtmlTextWriter writer) at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) at System.Web.UI.Page.Render(HtmlTextWriter writer) at System .Web.Mvc.ViewPage.Render(HtmlTextWriter writer) at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) at System.Web .UI.Control。System.Web.UI.Page.ProcessRequestMain 处的 RenderControl(HtmlTextWriter writer)(布尔 includeStagesBeforeAsyncPoint,布尔 includeStagesAfterAsyncPoint)InnerException:

我已经为此苦苦挣扎了几个小时。谁能帮我解决它并告诉我为什么会发生这种情况。

0 投票
4 回答
7674 浏览

unit-testing - 无法让 NUnit 的 Assert.Throws 正常工作

我可以发誓我已经使用 NUnit 的 Assert.Throws 来确定某个方法是否抛出了特定的异常,但是我之前的记忆让我失望了。我在 SO 上阅读了这篇文章,但它没有回答我的问题,因为我知道正确的语法,并且我不想对返回的异常做任何事情(我不想查看异常成员,尽管这在以后可能会有用)。

我编写了单元测试来证明我对 Dictionary 的使用缺乏了解,并且无法让它处理抛出的 KeyNotFoundException。当我运行时,我得到一个未处理的 KeyNotFoundException 错误,而不是 NUnit 捕获它并通过测试。我确认我没有设置 VS IDE 来中断抛出的 .NET 异常。

我试过这两种方法:

但两者都会导致未处理的异常。我在这里想念什么?

UPDATE似乎其他人无法重现这一点。这是一个屏幕截图:

替代文字

0 投票
3 回答
434 浏览

c# - 字典中的 KeyNotFound 异常(T)

我正准备用头撞墙

我有一个名为 Map 的类,它有一个名为 tiles 的字典。

我临时填了这本字典来测试一些东西..

在我的主程序代码中

现在,如果我在我的代码中添加一个断点,我可以清楚地看到我的地图类的实例 (m) 通过上面的函数填充了对,但是当我尝试使用 GetTile 函数访问一个值时:

它总是返回 null。同样,如果我在 Map 对象内部查看并找到 x=2,y=2,z=0 的 Location 键,我清楚地看到该值是 FillTemp 生成的 Tile..

为什么要这样做?到目前为止,我对这样的字典没有任何问题。我不知道为什么它返回null。再次,在调试时,我可以清楚地看到 Map 实例包含它说它没有的 Location 键......非常令人沮丧。

有什么线索吗?需要更多信息吗?

帮助将不胜感激:)

0 投票
3 回答
5826 浏览

c# - 哪种机制是扩展 Dictionary 以处理丢失键的更好方法,为什么?

我发现自己有一个小烦恼——我有一个Dictionary<TKey, TValue>包含可能存在或不存在的值的值。

所以正常的行为是使用索引器,如下所示:

但是,如果"key"不在字典中,则会抛出 a KeyNotFoundException,因此您可以这样做:

这很好,除了我可以连续加载这些 -TryGetValue开始感觉非常笨重。

所以选项1是一种扩展方法:

这让我可以:

这很简单,但是名称类似于现有实例方法的附加扩展方法可能会增加混乱并降低可维护性。它也与字典的索引器集不一致 - 它将处理丢失的键。

所以选项 2 是一个新的实现,IDictionary<TKey, TValue>它带有一个隐式转换,Dictionary<TKey, TValue>但一个索引器返回default(TValue)而不是抛出一个KeyNotFoundException.

让我这样做:

所以现在 get 和 set 的值是一致的,但是值类型比较混乱并且ForgivingDictionary涉及到更多的代码。

这两种方法看起来都很“混乱”——.Net 中有没有更好的方法来做到这一点?

这两种方法都做出了可能导致混淆的妥协,但一种比另一种更明显/清晰吗?为什么?

0 投票
2 回答
4042 浏览

c# - 如何使用 SevenZipSharp 将文件添加到存档

首先我想做的是:

我有一个要添加到同一存档中的文件列表。此文件的文件夹结构应包含在存档中。

我遇到的问题是我无法将文件添加到现有存档中。当我CompressionMode.Create只使用存档中的实际文件时,当我使用时,CompressionMode.Append我得到一个KeyNotFoundException并且存档上没有任何变化。