私は一生これを理解することはできません。次の 2 つの辞書オブジェクトがあるとします。
// Assume "query" is a LINQ queryable.
Dictionary<string, int> d1 = query.ToDictionary(k => k.Key, v => v.Value);
Dictionary<string, int> d1 = query.ToDictionary(k => k.Key, v => v.Value);
次のステートメントは、Dictionary と IDictionary の間の暗黙的な変換ができないというコンパイル時エラーを生成します。
// Compile time error!
Tuple<IDictionary<string, int>, IDictionary<string, int>> = Tuple.Create(d1, d2);
私は明示的に変換を行う必要があります:
Tuple<IDictionary<string, int>, IDictionary<string, int>> = Tuple.Create(d1 as IDictionary<string, int>, d2 as IDictionary<string, int>);
コンパイラが共分散操作を理解できない理由を理解していません-DictionaryはIDictionaryを実装しています-特に、このようなものがもちろん機能するためです。
IDictionary<string, int> d3 = d1;
この動作には正当な理由があると確信しており、それが何であるかに興味があります。
更新 1: 明確にするために、問題を解決する方法ではなく、動作に興味があります。私はさまざまな解決策を認識しています:)
更新 2:
すばらしい回答をありがとうございました。私はTuple
不変であるとは知りませんでしたが、今ではそうです。