मैं एंथनी Pegram जवाब स्पष्ट करने की कोशिश करेंगे।
सामान्य प्रकार किसी प्रकार के तर्क पर सहसंयोजक होता है, जब वह उक्त प्रकार के मान लौटाता है (उदाहरण के Func<out TResult>
उदाहरण TResult
, IEnumerable<out T>
रिटर्न के उदाहरण T
)। यही है, अगर कुछ उदाहरणों की वापसी करते हैं TDerived
, तो आप ऐसे उदाहरणों के साथ काम कर सकते हैं जैसे कि वे थे TBase
।
सामान्य प्रकार कुछ प्रकार के तर्क पर विरोधाभासी है जब यह उक्त प्रकार के मूल्यों को Action<in TArgument>
स्वीकार करता है (जैसे उदाहरणों को स्वीकार करता है TArgument
)। यही है, अगर कुछ की जरूरत है उदाहरणों TBase
, आप के उदाहरणों में अच्छी तरह से पारित कर सकते हैं TDerived
।
यह काफी तार्किक लगता है कि जेनेरिक प्रकार जो दोनों को स्वीकार करते हैं और कुछ प्रकार के रिटर्न (जब तक कि यह जेनेरिक प्रकार के हस्ताक्षर में दो बार परिभाषित नहीं किया जाता है, उदाहरण के लिए CoolList<TIn, TOut>
) संबंधित प्रकार के तर्क पर सहसंयोजक नहीं होते हैं और न ही कंट्रोवरिएंट। उदाहरण के लिए, List
.NET 4 में परिभाषित किया गया है List<T>
, List<in T>
या नहीं List<out T>
।
कुछ संगतता कारणों के कारण Microsoft उस तर्क को अनदेखा कर सकता है और अपने मान प्रकार तर्क पर सरणियाँ बना सकता है। हो सकता है कि उन्होंने एक विश्लेषण किया और पाया कि ज्यादातर लोग केवल सरणियों का उपयोग करते हैं जैसे कि वे आसानी से पढ़ रहे थे (अर्थात, वे केवल सरणी आरंभीकरण का उपयोग करके कुछ डेटा को एक सरणी में लिखते हैं), और, इस तरह, लाभ संभावित समय से पहले होने वाले नुकसान से आगे निकल जाते हैं। त्रुटि जब कोई सरणी में लिखते समय सहसंयोजक का उपयोग करने की कोशिश करेगा। इसलिए इसकी अनुमति है लेकिन इसे प्रोत्साहित नहीं किया जाता है।
अपने मूल प्रश्न के लिए, मूल सूची से कॉपी किए गए मानों के साथ list.ToArray()
एक नया बनाता है LinkLabel[]
, और (उचित) चेतावनी से छुटकारा पाने के लिए, आपको इसमें पास Control[]
होना होगा AddRange
। list.ToArray<Control>()
काम करेंगे : अपने तर्क और रिटर्न के रूप में ToArray<TSource>
स्वीकार करता IEnumerable<TSource>
है TSource[]
; List<LinkLabel>
केवल पढ़ने के लिए उपकरण IEnumerable<out LinkLabel>
, जो IEnumerable
सहसंयोजक के लिए धन्यवाद , विधि IEnumerable<Control>
को इसके तर्क के रूप में स्वीकार किया जा सकता है।
LinkLabel
(विशेष प्रकार) सेControl
(आधार प्रकार) जा रहा हूं ।