दिलचस्प पोस्ट
अजीब भाषा की सुविधा रूबी में स्ट्रिंग कन्टेनटेनेशन स्प्रिंग बैच में एकाधिक डाटासॉन्स का उपयोग XE16 में ठीक कांच मेनू से मेरी आवाज़ कमांड गायब क्यों है? मिनट और सेकंड में उलटी गिनती ASP.NET वेब प्रपत्र में jQuery के सत्यापन प्लगइन एप्लिकेशन समूह के साथ ऐप्स के बीच डेटा संचार और जारी रहें क्या है ((संरचना का नाम *) शून्य -> ​​ख) सी 11 में अपरिभाषित व्यवहार का कारण बनता है? Mysql के लिए अधिकतम क्वेरी आकार क्या है? वेबव्यू में कैमरा या गैलरी से एक छवि अपलोड करें फ्रैग्मेंट से गतिविधि शुरू करने के कारण NullPointerException JSF + प्राइमफैसेस: `अपडेट` विशेषता घटक को अपडेट नहीं करता है मैं यूनिकोड एसेक अनुक्रमों को एक .net स्ट्रिंग में यूनिकोड वर्णों में कैसे परिवर्तित कर सकता हूं? एएसपी.नेट पृष्ठ जीवन चक्र विवरण एक ही आवेदन के दो प्रक्रियाओं के बीच साझा प्राथमिकताओं

Linq कास्ट <T> ऑपरेशन क्यों विफल हो जाता है जब मेरे पास एक अंतर्निहित डाली परिभाषित है?

मैंने दो वर्गों का निर्माण किया है, उनमें से उनमें से एक के बीच एक अंतर्निहित डाली है:

public class Class1 { public int Test1; } public class Class2 { public int Test2; public static implicit operator Class1(Class2 item) { return new Class1{Test1 = item.Test2}; } } 

जब मैं एक प्रकार की एक नई सूची तैयार करता हूं और दूसरे को कास्ट करने का प्रयास करता हूं, तो यह एक InvalidCastException के साथ विफल रहता है:

 List<Class2> items = new List<Class2>{new Class2{Test2 = 9}}; foreach (Class1 item in items.Cast<Class1>()) { Console.WriteLine(item.Test1); } 

यह, हालांकि, ठीक काम करता है:

 foreach (Class1 item in items) { Console.WriteLine(item.Test1); } 

कास्ट का प्रयोग करते समय निहित डाली क्यों नहीं बुलाया जाता है?

Solutions Collecting From Web of "Linq कास्ट <T> ऑपरेशन क्यों विफल हो जाता है जब मेरे पास एक अंतर्निहित डाली परिभाषित है?"

क्योंकि, प्रतिक्षेपक के माध्यम से कोड को देखते हुए, कास्ट किसी भी अंतर्निहित कास्ट ऑपरेटर लेने की कोशिश नहीं करता है (LINQ कास्ट कोड सभी प्रकार के विशेष मामलों के लिए भारी अनुकूलित होता है, लेकिन उस दिशा में कुछ भी नहीं) खाते में (जैसा कि कई .NET भाषाओं )।

प्रतिबिंब और अन्य चीजों के बिना, जेनेरिक किसी भी मामले में इस तरह के अतिरिक्त सामान खाते में लेने के लिए बॉक्स के बाहर किसी भी प्रस्ताव नहीं करता है।

संपादित करें: आम तौर पर, अधिक जटिल सुविधाएं जैसे कि निहित / व्याख्यान, समानता ऑपरेटर आदि सामान्य तौर पर सामान्य सुविधाओं जैसे LINQ द्वारा नियंत्रित नहीं होती हैं।

यदि आवश्यक हो तो रूपांतरण का उपयोग करने के लिए आप इसका उपयोग भी कर सकते हैं:

 public static IEnumerable<TDest> CastAll<TItem, TDest>(this IEnumerable<TItem> items) { var p = Expression.Parameter(typeof(TItem), "i"); var c = Expression.Convert(p, typeof(TDest)); var ex = Expression.Lambda<Func<TItem, TDest>>(c, p).Compile(); foreach (var item in items) { yield return ex(item); } } 

http://adventuresdotnet.blogspot.com/2010/06/better-more-type-safe-alternative-to.html से

इसके लिए धन्यवाद मैं उस सटीक मामले को कहीं न कहीं इस्तेमाल कर रहा था। आपने मुझे समय का ढेर बचा लिया है अपनी समस्या का संभावित समाधान के रूप में आप कन्वर्ट सभी का उपयोग कर सकते हैं <> इसके बजाय, इस तरह:

 foreach (Class1 item in items.ConvertAll<Class1>((i) => (Class1)i)) { Console.WriteLine(item.Test1); } 

संपादित करें: या यदि आप अधिक स्पष्ट होना चाहते हैं कि कास्ट निहित है तो यह भी काम करता है:

 foreach (Class1 item in items.ConvertAll<Class1>(i => i)) { Console.WriteLine(item.Test1); } 

यदि आपको वास्तव में इस प्रकार के रूपांतरण की आवश्यकता है तो यहां एक समाधान का उपयोग थोड़ा सा लिंक्स पर किया जा सकता है:

 सूची आइटम = नई सूची {नई कक्षा 2 {टेस्ट 2 = 9}};
 फोरहैच (कक्षा 1 आइटम में (आइटम से एक्स में से चुनें (कक्षा 1) x))
 {
     Console.WriteLine (item.Test1);
 }