[解決済み] KeyValuePairとTupleの使い分けはいつが良いのか?
質問
私はこれまで、一般的に
KeyValuePair<TKey,TValue>
型を使っています。これは、一方が他方のキーであるという意味で、ペアに関連するデータを持っている場合です。もしデータが無関係であれば
Tuple<T1,T2>
型がより理にかなっているので、そちらを使用します。
今、私が読んだのは
この記事
を一般に避けるべき理由について
KeyValuePair<TKey,TValue>
を避け
Tuple<T1,T2>
. 主な論点は、パフォーマンス上の利点として
Tuple<T1,T2>
.
パフォーマンス以外で、KVP が
Tuple<T1,T2>
?
どのように解決するのですか?
さて、この型は、ひとつには名前が悪いと考えられます。KeyValuePair という名前は、キーと値を表すはずです。もし、2つのオブジェクトが実際にはキーと値ではなく、単なる2つのものであったらどうでしょうか?もし、メソッドやプロパティが、型が
KeyValuePair<TKey, TValue>
の値がキーと値であると予想します。これは本当に、意図を伝え、将来的に自分自身、あるいは場合によっては他のチームメンバーに対して明確にするためだけのものです。タプルはそのような関連性を示すものではありません。
タプルはまた、別の値を追加して、3タプル(またはトリプレット、どう呼んでもよい)にすることも容易です。F#のようないくつかの.NET言語では には特別な構文があり をタプルの周囲に置くことができます。
実装の観点からは
Tuple
は多くのことを行います
KeyValuePair
はそうではありません。タプルは比較可能であり、それらは
IComparable
と
IStructuralEquatable
というインタフェースがあるため、2つのタプルを比較することが容易になります。
関連
-
[解決済み】WCFとは何か、何ができるのか?
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] async」と「await」の使い方とタイミング
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?
-
[解決済み] LINQで.Firstと.FirstOrDefaultを使用するタイミングは?
-
[解決済み] INotifyPropertyChangedの実装 - より良い方法は存在するか?
-
[解決済み] C#のインターフェイス。暗黙の実装と明示の実装
-
[解決済み] .Any() vs .Count() > 0のどちらのメソッドがより良いパフォーマンスを発揮しますか?
-
[解決済み】ArrayとList<T>の比較。いつどちらを使うか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プラットフォームが同じでも「不正なフォーマットでプログラムを読み込もうとしました。
-
[解決済み] ファイル *.mdf をデータベースとして添付できません。
-
[解決済み] 16進数値0x00は無効な文字です。
-
[解決済み] C++/CLIにおけるキャレット('^')の意味は?
-
[解決済み] EF Coreのadd-migrationのビルドに失敗しました。
-
[解決済み] スマートクライアント・ソフトウェアファクトリーの体験談
-
[解決済み] ネットワークの位置からアセンブリをロードすることはできません
-
[解決済み] .NET WebRequestを使用してsharepointにファイルをアップロードすると、409/Conflict HTTPエラーが発生する理由?
-
[解決済み] 埋め込みリソーステキストファイルの読み方
-
[解決済み] WCF - メッセージサイズのクォータを増加させる方法