辞書(Dictionary型)にマージするUNIONメソッドをテストしています。 TValueの型は文字列またはintまたはオブジェクトでも正常に動作します。しかし、TValueの型がコレクション(Listとobject []でテスト済み)の場合、例外がスローされます。"ArgumentException:同じキーを持つ項目が既に追加されています。"ここでEnumer Dictionary <TKey、TValue>とEnumerable.Unionメソッド
は私のコードです:
Dictionary<int,string> _dico1 = new Dictionary<int, string>()
{
{0, "zero"},
{1, "one"}
};
Dictionary<int,string> _dico2 = new Dictionary<int,string>()
{
{1 , "one"},
{2 , "two"},
{3 , "three"},
{4 , "four"},
{5 , "five"},
{6 , "six"}
};
Dictionary<int, List<string>> _dico3 = new Dictionary<int, List<string>>()
{
{0, new List<string>{"zero"}},
{1, new List<string>{"one"}}
};
Dictionary<int, List<string>> _dico4 = new Dictionary<int, List<string>>()
{
{1, new List<string>{"one"}},
{2, new List<string>{"two"}},
{3, new List<string>{"three"}},
{4, new List<string>{"four"}},
{5, new List<string>{"five"}},
{6, new List<string>{"six"}},
};
// works fine
var mergeDico = _dico1.Union(_dico2).ToDictionary(key => key.Key, value => value.Value);
// throw an ArgumentException : An item with the same key has already been added
var mergeDico2 = _dico3.Union(_dico4).ToDictionary(key => key.Key, value => value.Value);
動作は同じではありませんなぜ?そしてこの問題を解決するには?
ありがとうございました!
だから、最初のケースでは、それは動作しますか不変型(文字列)であり、TValueが参照型なので失敗します。 – Florian
@Florian:それは、不変性に直接起因するものではありません。それは、関係する型がバリュー・イコール・セマンティクスを持っているかどうかによるものです。あなたはまだそれをしない不変の型を持つことができます。 –