c# - Why can't I pass List<T> to a generic constructor parameter although all contraints are met? -
मेरे पास निम्न कोड है:
लोक क्लास नमूना क्लास & lt; T, टीकॉलक्शन & gt; जहां टैक्लुलेशन: क्लास, आईएलआईटीआईटी & lt; T & gt ;, IReadOnlyList & lt; T & gt; {निजी रीडोनली टीकॉलक्शन _collection; सार्वजनिक नमूना क्लास (): यह (नई सूची & lt; T & gt; ()) {} सार्वजनिक नमूना क्लास (TCollection संग्रह) {_collection = संग्रह; दुर्भाग्य से, डिफ़ॉल्ट कन्स्ट्रक्टर सार्वजनिक नमूना क्लास () युक्त रेखा: यह (नई सूची & lt; T & gt; ()) {}
संकलित नहीं करता है त्रुटि संदेश कहता है: तर्क 1: 'System.Collections.Generic.List' से 'TCollection' में परिवर्तित नहीं किया जा सकता। ऐसा क्यों होता है? वास्तव में TCollection जेनेरिक पर दिए गए सभी कंटेंट्स को पूरा करता है: यह एक ऐसा वर्ग है जो IList & lt; T & gt;
और IReadOnlyList & lt; T & gt; । आपकी मदद के लिए बहुत बहुत धन्यवाद।
संपादित करें: अपडेटेड कोड क्योंकि इसमें त्रुटियां हैं। < P> ऐसा क्यों होता है?
समस्या यह है कि मैं इस तरह कोड लिख सकता हूं: <पूर्व> कक्षा X: आईआईएलआईटी & lt; int & gt ;, IReadOnlyList & lt; int & gt; {...}
और फिर इसे इस तरह उपयोग करने का प्रयास करें:
var उदाहरण = नया नमूना क्लास & lt; int, X & gt; ();
लेकिन सूची & lt; int & gt;
से X
पर कोई रूपांतरण नहीं है।
इस परिदृश्य की संभावना इसलिए आपको कंपाइलर त्रुटि संदेश मिलता है:
तर्क 1: 'System.Collections.Generic.List' से 'TCollection' में कनवर्ट नहीं किया जा सकता।
" सूची & lt; T & gt;
" जो आप के लिए खोज रहे हैं, का डिफ़ॉल्ट प्राप्त करने के लिए, आप उस डिफॉल्ट कन्स्ट्रक्टर से छुटकारा पा सकते हैं और इसे निम्नलिखित के साथ बदल सकते हैं:
स्थैतिक वर्ग नमूनाक्लास {सार्वजनिक स्थिर सैम्पल क्लास & lt; T, सूची & lt; T & gt; & gt; & Lt; T & gt; () {नया नमूना क्लास लौटें & lt; T, सूची & lt; T & gt; & gt; (नई सूची & lt; T & gt; ()); }}
यह ट्यूप्ले
के स्थैतिक वर्ग जैसा इसकी स्थिर Tuple.Create
सामान्य विधि और गैर-स्थिर ट्यूपल एंड लेफ्टिनेंट; टी 1 & gt;
, ट्यूपल & lt; T1, T2 & gt;
, आदि वर्ग।
Comments
Post a Comment