मैं एक object o
कि जाना जाता है होना करने के लिए एक बॉक्सिंग int
या uint
है:अनबॉक्सिंग uint/जानने क्या बॉक्स के अंदर है बिना पूर्णांक
object o = int.MinValue
object o = (uint)int.MinValue // same bytes as above
मैं क्या बॉक्स में है पता नहीं है, सब मैं के बारे में परवाह है कि वहां 4 बाइट हैं जो मैं int
या uint
पर सहारा देना चाहता हूं। यह एक unchecked
संदर्भ जब मैं मूल्यों (बक्से के बजाय) है में ठीक काम करता है:
unchecked
{
int a = (int)0x80000000u; // will be int.MinValue, the literal is a uint
uint b = (uint)int.MinValue;
}
नोट: सी # में डिफ़ॉल्ट सब कुछ अनियंत्रित है करके, अनियंत्रित संदर्भ यहाँ केवल आवश्यक है, क्योंकि हम शाब्दिक और संकलक के साथ काम कर रहे हैं जानना चाहता है कि क्या हम वास्तव में पैर में खुद को शूट करना चाहते हैं।
समस्या अब है कि मुझे नहीं पता कि बॉक्स के अंदर क्या है (इसके 4 बाइट्स के अलावा), लेकिन रनटाइम ऐसा करता है जब मैं गलत प्रकार से अनबॉक्स करने का प्रयास करता हूं तो मुझे InvalidCastException
मिलता है। मुझे पता है कि यह उचित रनटाइम व्यवहार है, लेकिन इस मामले में मुझे पता है कि मैं क्या कर रहा हूं और एक "अनचेक अनबॉक्स" चाहता हूं। क्या ऐसा कुछ मौजूद है?
मुझे पता है कि मैं catch
और पुनः प्रयास कर सकता हूं, इसलिए यह उत्तर के रूप में नहीं गिना जाता है।
Convert अतिप्रवाह अपवाद को जन्म देती है (मैं अनियंत्रित बलात्कार की जरूरत है)। बॉक्स सामग्री के लिए जांच करना एक अच्छा विचार है, फिर भी उम्मीद है कि एक बेहतर समाधान है। –
@ जोहान्स: आप 'अनचेक ((uint) कन्वर्ट कर सकते हैं। ToInt64 (o))' बड़े आकार में परिवर्तित करके अपवाद के आसपास पहुंचने के लिए, हालांकि यदि आपको कभी 64-बिट पूर्णांक पर काम करने की आवश्यकता होती है तो आपके पास नहीं होगा इसके साथ करने के लिए एक बड़ा आकार। – Quartermeister