मैं यूनियन शब्दकोष (प्रकार के शब्दकोश) में विलय करने के लिए विधि का परीक्षण कर रहा हूं। यह टीवीएलयू प्रकार स्ट्रिंग या इंट या ऑब्जेक्ट के साथ ठीक काम करता है। लेकिन अगर टीवीएयू प्रकार एक संग्रह है (सूची और वस्तु [] के साथ परीक्षण किया गया है) एक अपवाद फेंक दिया गया है: "ArgumentException: एक ही कुंजी वाला एक आइटम पहले ही जोड़ा जा चुका है।" क्यों व्यवहार समान नहीं हैशब्दकोश को मर्ज करें <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 प्रकार मान प्रकार (int) कर रहे हैं या अपरिवर्तनीय प्रकार (स्ट्रिंग) और, दूसरे मामले में यह विफल रहता है क्योंकि टीवीएला संदर्भ प्रकार है? – Florian
@ फ्लोरियन: यह अपरिवर्तनीयता के कारण सीधे नहीं है - यह इस बात के कारण है कि इसमें शामिल प्रकारों की समानता अर्थशास्त्र है। आप अभी भी अपरिवर्तनीय प्रकार कर सकते हैं जो ऐसा नहीं करते हैं। –