問題タブ [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.
c# - KeyNotFoundException を処理する最良の方法
作業中のプログラムの検索を実行するために辞書を使用しています。ディクショナリを介して一連のキーを実行しますが、一部のキーには値がないことが予想されます。発生した場所で右をキャッチしKeyNotFoundException
、吸収します。他のすべての例外は一番上に伝播します。これはこれを処理する最良の方法ですか?または、別のルックアップを使用する必要がありますか? ディクショナリは int をキーとして使用し、カスタム クラスを値として使用します。
c# - C# ディクショナリ<> キーがありません
val = dict["nonexistent key"] を実行すると、System.Collections.Generic.KeyNotFoundException が発生します。値を生成するために、キーをパラメーターとして辞書でメンバー関数を呼び出す方法はありますか?
-編集- 多分私はもっと具体的であるべきだった. メンバー関数を自動的に呼び出して、そのキーの適切な値を作成する必要があります。この場合、DB にエントリを作成し、一意のハンドルを返します。以下に、私の解決策を投稿します。
c# - C# 例外: キーがディクショナリに存在しません
少し問題が発生しました。次のコードを呼び出そうとすると、remove メソッドが例外をスローし、「キーがディクショナリに存在しません」というメッセージが表示されることがあります。
クラス ARPHostEntry は、このクラスの両方のフィールドが読み取り専用である IP アドレスと関連付けられた MAC アドレスを保持する単純なクラスです。プログラムはマルチスレッドですが、辞書を使用するたびにこのクラスの辞書をロックします。
私は無力です。この例外が発生するのはなぜですか?
敬具
編集
明確にするために、受け入れられた答えは正しいです。生成された例外は、辞書へのクロススレッド アクセスによって引き起こされた問題でした。
c# - KeyNotFoundException、ただしデバッグ時以外
私は拡張ライブラリを構築しており、http://www.extensionmethod.netにある優れた拡張メソッドを使用して組み込みました。私の単体テスト (NUnit 1.5.2 を使用) で、興味深い問題に遭遇しました。まず、コードを見てみましょう。
関数が行うことは、TSource 型の IEnumerable を取り込み、アイテムをディクショナリにピボットし、定義した関数を使用してアイテムを集約することです。サンプルのデータ セットは、(Person という型の) 人の配列です。
そして最後に、テストを行います。
このテスト ケースで返されるのは Dictionary> インスタンスです。ブール値は IsMale グループ化の結果であり、サンプル データでは true と false の 2 つの項目を正しく返します。内部ディクショナリには、年齢のキーとカウントの値があります。私たちのテスト データでは、organized[true][30] はセット内の 30 歳のすべての男性を反映しています。
問題はピボット関数自体ではありませんが、何らかの理由で、NUnit テスト ランナーと Resharper のユニット テスト ランナーの両方でこれを実行すると、テストは失敗し、"int count = organized[true][ 30];". このテストをデバッグすると、値 3 が正しく返されます (サンプル データのように、30 歳の男性が 3 人います)。
何かご意見は?
c# - 以前にキー コレクションから取得したキーを使用すると KeyNotFoundException が発生しますか?
上記の数行を取得したキーを使用しているにもかかわらず、何らかの理由で KeyNotFoundException を取得している次のコードがあります。これがうまくいかない状況を知っている人はいますか?私は困惑しています。ところで 'SchemaElementType は列挙型です。
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, IDictionary
2 htmlAttributes) の System.Web.Mvc.Html.ValidationExtensions.ValidationSummary(HtmlHelper htmlHelper, String message, IDictionary`2 htmlAttributes) at Fusion.UI.MvcWebUX.Helper.FormGenerator.GenerateFormValidation() in D:\EBS\Project.Fusion \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 行目( System.Web.UI.Control の d:\EBS\Project.Fusion\Fusion.UI.MvcWebUX\Views\Shared\AutoView.aspx:line 7 の HtmlTextWriter __w、Control parameterContainer)。System.Web.UI.Control.RenderChildren(HtmlTextWriter ライター) の RenderChildrenInternal(HtmlTextWriter ライター、ICollection の子) System.Web.UI.Control.Render(HtmlTextWriter ライター) System.Web.UI.Control.RenderControlInternal(HtmlTextWriter ライター、 ControlAdapter アダプター) で System.Web.UI.Control.RenderControl(HtmlTextWriter ライター、ControlAdapter アダプター) で System.Web.UI.Control.RenderControl(HtmlTextWriter ライター) で ASP.views_shared_fusion_master.__Render__control1(HtmlTextWriter __w、コントロール parameterContainer) で d: \EBS\Project.Fusion\Fusion.UI.MvcWebUX\Views\Shared\Fusion.Master: System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) の System.Web.UI.Control.RenderChildren の 74 行目(HtmlTextWriter ライター) System.Web.UI.Control で。Render(HtmlTextWriter ライター) で System.Web.UI.Control.RenderControlInternal(HtmlTextWriter ライター、ControlAdapter アダプター) で System.Web.UI.Control.RenderControl(HtmlTextWriter ライター、ControlAdapter アダプター) で System.Web.UI.Control.RenderControl( HtmlTextWriter ライター) で System.Web.UI.Control.RenderChildrenInternal (HtmlTextWriter ライター、ICollection の子) で System.Web.UI.Control.RenderChildren(HtmlTextWriter ライター) で System.Web.UI.Page.Render(HtmlTextWriter ライター) で System.Web.UI.Page.Render(HtmlTextWriter ライター) でSystem.Web.UI.Control.RenderControlInternal(HtmlTextWriter ライター、ControlAdapter アダプター) の .Web.Mvc.ViewPage.Render(HtmlTextWriter ライター) System.Web.UI.Control.RenderControl(HtmlTextWriter ライター、ControlAdapter アダプター) System.Web の.UI.コントロール。System.Web.UI.Page.ProcessRequestMain の RenderControl (HtmlTextWriter ライター) (ブール値 includeStagesBeforeAsyncPoint、ブール値 includeStagesAfterAsyncPoint) InnerException:
私はこれに数時間苦労しています。誰かがそれを解決するのを手伝ってくれて、なぜこれが起こっているのか教えてもらえますか.
unit-testing - NUnit の Assert.Throws を正しく動作させるのに問題がある
メソッドから特定の例外がスローされるかどうかを判断するために NUnit の Assert.Throws を使用したと断言できたかもしれませんが、私の記憶は以前に失敗しました。SO でこの投稿を読みましたが、正しい構文を知っているため、私の質問には答えませんでした。また、返される例外については何もしたくありません (例外のただし、これは後で役立つ可能性があります)。
Dictionary の使い方を理解していないことを証明するために単体テストを作成しましたが、スローされる KeyNotFoundException を処理できませんでした。NUnit がそれをキャッチしてテストに合格する代わりに、実行時に未処理の KeyNotFoundException エラーが発生します。スローされた .NET 例外で中断するように VS IDE が設定されていないことを確認しました。
私はこの2つの方法を試しました:
と
ただし、どちらも未処理の例外が発生します。ここで何が欠けていますか?
更新は、他の人がこれを再現できないようです。スクリーンショットは次のとおりです。
c# - ディクショナリの KeyNotFound 例外 (T の)
頭を壁にぶつける準備ができている
tiles という辞書を持つ Map というクラスがあります。
いくつかのことをテストするために、一時的にこの辞書に入力します..
そして私のメインプログラムコードで
ここで、コードにブレークポイントを追加すると、マップ クラスのインスタンス (m) が上記の関数を介してペアで満たされていることがはっきりとわかりますが、GetTile 関数を使用して値にアクセスしようとすると、次のようになります。
常に null を返します。繰り返しますが、Map オブジェクト内を表示し、 x=2,y=2,z=0 の Location キーを見つけると、値が FillTemp によって生成された Tile であることがはっきりとわかります。
なぜこれを行うのですか?これまでのところ、このような辞書で問題はありませんでした。null を返す理由がわかりません。繰り返しになりますが、デバッグ時に、 Map インスタンスに Location キーが含まれていることがはっきりとわかります...非常にイライラします。
手がかりはありますか?さらに情報が必要ですか?
助けていただければ幸いです:)
c# - 不足しているキーに対処するために Dictionary を拡張するより良い方法とその理由はどれですか?
私は多くのことで自分自身を見つけるマイナーな煩わしさがあります-Dictionary<TKey, TValue>
そこにあるかもしれないし、ないかもしれない値を含む を持っています。
したがって、通常の動作は、次のようにインデクサーを使用することです。
ただし、"key"
が辞書にない場合は がスローされるKeyNotFoundException
ため、代わりに次のようにします。
これは問題ありませんが、これらを連続して大量に保持できることを除けば、TryGetValue
ひどく不格好に感じ始めます。
したがって、オプション 1 は拡張メソッドです。
これにより、次のことができます。
これは単純ですが、既存のインスタンス メソッドに似た名前の拡張メソッドを追加すると、混乱が生じ、保守性が低下する可能性があります。また、欠落しているキーを処理するディクショナリのインデクサー セットとも一致しません。
したがって、オプション 2 は、IDictionary<TKey, TValue>
からの暗黙的なキャストを使用したの新しい実装ですが、をスローする代わりにDictionary<TKey, TValue>
返すインデクサーです。default(TValue)
KeyNotFoundException
それは私にやらせてください:
そのため、get 値と set 値は一貫していますが、値の型はより複雑で、ForgivingDictionary
より多くのコードが必要になります。
どちらの方法も「面倒」に見えます-.Netでこれを行うより良い方法はありますか?
どちらの方法も妥協して混乱を招く可能性がありますが、一方が他方より明白/明確ですか? なぜ?
c# - SevenZipSharp を使用してファイルをアーカイブに追加する方法
まずやりたいこと:
同じアーカイブに追加したいファイルのリストがあります。このファイルのフォルダー構造は、アーカイブに含める必要があります。
私が抱えている問題は、既存のアーカイブにファイルを追加できないことです。CompressionMode.Create
実際のファイルのみを使用すると、アーカイブにあり、使用CompressionMode.Append
するとKeyNotFoundException
、アーカイブで何も変更されません。