यह सवाल enums के लिए सामान्य तरीकोंसी # कास्टिंग
public enum Crustaceans
{
Frog = 1,
Toad = 4
}
मैं बस पर्याप्त मेरी enum का एक उदाहरण
short val = 4;
Crustaceans crusty = (Crustaceans) val;
बना सकते हैं एक enum को देखते हुए भीतर enums की ढलाई से संबंधित है हालांकि, अगर
short val = 4;
object obj = (object) val;
Crustaceans crusty = (Crustaceans)obj;
क्रिस्टी के प्रारंभिकरण को करने का प्रयास करने के लिए एक रनटाइम अपवाद फेंक दिया जाता है।
क्या कोई यह समझा सकता है कि यह क्यों हो रहा है, और ऐसा क्यों करना कानूनी नहीं है।
ऐसा नहीं है कि मैं वास्तव में ऐसा करना चाहता था, लेकिन मैं जेनिक्स के साथ ऐसा कुछ करने की कोशिश करते समय एक समस्या के दौरान कैमरे और प्रभावशाली ढंग से कवर के तहत क्या हो रहा है। यानी
public T dosomething<T>(short val) where T : new()
{
T result = (T)(object) val;
return result;
}
तो क्या मैं क्या करने की कोशिश कर रहा हूँ एक सामान्य समारोह है कि एक अपवाद फेंकने के बिना enums और गैर enums (इतनी गंभीर-नहीं बल्कि अच्छा होगा) एक छोटी मान पर सेट किया जा सकता है कि साथ काम करता है और वास्तव में सही enum मूल्य शुरू करना।
टाइप यह लाइन से बाहर होगा बाहर बात करने के लिए बदलने के लिए नहीं करना चाहती है कि मेंढक और टॉड क्रस्टेसियन नहीं हैं?:) – JTMon
संभावित डुप्लिकेट [मैं दशमलव के रूप में int को अनबॉक्स क्यों नहीं कर सकता?] (Http://stackoverflow.com/questions/1085097/why-cant-i-unbox-an-int-as-a-decimal) –
@sweetfa: जबकि प्रश्न मैंने int बनाम दशमलव के साथ सौदों की ओर इशारा किया है, न कि enums, यह व्यवहार (जो मुक्केबाजी और unboxing से संबंधित है) की व्याख्या करता है। विशेष रूप से, स्वीकृत उत्तर एरिक लिपर्ट द्वारा एक लेख को संदर्भित करता है: "[प्रतिनिधित्व और पहचान] (http://blogs.msdn.com/b/ericlippert/archive/2009/03/19/representation-and-identity.aspx) ", जो इसे बहुत विस्तार से बताता है। –