[解決済み] IDictionaryの実装で、キーが見つからない場合、throwではなく、デフォルト値を返すものはありますか?
2022-05-05 17:01:13
質問
へのインデクサは
Dictionary
は、キーが見つからない場合、例外を投げます。 の実装はありますか?
IDictionary
を返す代わりに
default(T)
?
については知っています。
TryGetValue()
というメソッドがありますが、これはLINQで使うのは無理です。
これなら効率よく必要なことができるかな?
myDict.FirstOrDefault(a => a.Key == someKeyKalue);
Hashのルックアップではなく、キーをイテレートすると思うので、そうはならないと思います。
どのように解決するのですか?
確かに、それでは全く効率的ではありませんね。
コメント通り、.Net Core 2+ / NetStandard 2.1+ / Net 5で。
MSは、拡張メソッド
GetValueOrDefault()
それ以前のバージョンでは、拡張メソッドを自分で書くことができます。
public static TValue GetValueOrDefault<TKey,TValue>
(this IDictionary<TKey, TValue> dictionary, TKey key)
{
TValue ret;
// Ignore return value
dictionary.TryGetValue(key, out ret);
return ret;
}
あるいは、C# 7.1を使って。
public static TValue GetValueOrDefault<TKey,TValue>
(this IDictionary<TKey, TValue> dictionary, TKey key) =>
dictionary.TryGetValue(key, out var ret) ? ret : default;
を使っていること。
- 式言語化されたメソッド(C# 6)
- out 変数 (C# 7.0)
- デフォルトのリテラル(C# 7.1)
関連
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】統合マネージドパイプラインモードで適用されないASP.NETの設定が検出された
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み] JavaScriptにおけるマップとオブジェクトの比較
-
[解決済み】WCFクライアント `using` ブロックの問題に対する最良の回避策は何ですか?
-
[解決済み】汎用辞書の大文字・小文字を区別しないアクセス方法
-
[解決済み】どちらがより効率的か。ディクショナリ TryGetValue と ContainsKey+Item のどちらが効率的ですか?
-
[解決済み】辞書に新しい項目を追加したり、既存の項目を更新する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み】WebResource.axdとは何ですか?
-
[解決済み】キーが存在しない場合にデフォルト値を返すディクショナリ【重複