निम्नलिखित सी # कोड को देखते हुए:सी # में काम नहीं करना काम नहीं कर रहा है?
var a = new[] {"123", "321", 1}; //no best type found for implicitly typed array
और VB.NET में अपने समकक्ष:
Dim a = {"123", "321", 1} 'no errors
ऐसा लगता है कि VB.NET, सही ढंग से a
= Object()
के प्रकार के अनुमान लगाने के लिए सक्षम है, जबकि सी # शिकायत जब तक ऊपर करने के लिए तय हो गई है:
var a = new object[] {"123", "321", 1};
वहाँ उपरोक्त परिदृश्य के लिए सी # में ऑटो-अनुमान प्रकार के लिए एक रास्ता है?
संपादित करें: एक सी # खिलौने के डिब्बे में विभिन्न प्रकार के साथ खेलने के बाद दिलचस्प अवलोकन - प्रकार सही ढंग से मान लिया जाता है, तो सभी तत्वों को विरासत पेड़ में आम माता-पिता है, और है कि माता-पिता नहीं एक Object
है, या तत्व हो सकता है अगर एक व्यापक प्रकार में डालें (परिशुद्धता के नुकसान के बिना, उदाहरण के लिए Integer -> Double
)। तो इन दोनों को काम करेगा:
var a = new[] {1, 1.0}; //will infer double[]
var a = new[] {new A(), new B()}; //will infer A[], if B inherits from A
मुझे लगता है कि इस व्यवहार सी # में असंगत है, क्योंकि सभी प्रकार Object
से विरासत, तो यह किसी भी अन्य प्रकार की तुलना में काफी अलग पूर्वज नहीं है। यह शायद एक डिज़ाइन है, इसलिए बहस करने का कोई मतलब नहीं है, लेकिन यदि आप कारण जानते हैं, तो जानना दिलचस्प होगा कि क्यों।
बस उत्सुक, तो आप एक लेबल वस्तु का उपयोग कर बंद बेहतर होगा एक untyped सरणी के बजाय? – CookieOfFortune
@CookieOfFortune: कभी-कभी मुझे प्रोटोटाइप कारणों के लिए त्वरित और गंदे कोड लिखने की आवश्यकता होती है, अक्सर एसओ पर अन्य लोगों की सहायता के लिए। इस उद्देश्य के लिए एक वस्तु बनाना संभव नहीं है। – Neolisk
क्षमा करें, मेरा मतलब एक अज्ञात वस्तु है: var a = new {Str1 = "123", स्ट्र 2 = "321", AnInteger = 1}; – CookieOfFortune