वापस मूल बातें करने के लिए ...कोई भी .NET में मान प्रकारों के बीच "सुरक्षित" रूपांतरणों की जांच कैसे कर सकता है?
संदर्भ प्रकार के लिए, एक ऐसा कर सकते हैं:
SomeType someObject = firstObject as SomeType;
if (someObject == null)
{
// Handle the situation gracefully
}
else
{
// Do stuff
}
मूल्य प्रकारों के लिए, मेरी समझ हम निहित रूपांतरण (कोई डेटा हानि), स्पष्ट रूपांतरण (है कि है डेटा हानि का जोखिम होने पर आवश्यक है), Convert
वर्ग (एक "रूपांतरण रैपर" मुझे लगता है) और टाइप-विशिष्ट रूपांतरण (जैसे double x = Double.Parse("2");
), लेकिन मुझे उपरोक्त as
ऑपरेटर के समान कुछ नहीं मिला है।
तो, मेरे सवाल यह है: ढांचा कुछ विधि/ऑपरेटर/तकनीक के साथ प्रदान करता है इन पंक्तियों के साथ कुछ करने के लिए:
if (!Convert.CanConvert(someValue, someValueType))
{
// Beware! Data loss can occur
}
else
{
// No data loss here
}
यदि नहीं, वहाँ किसी को भी एक ठोस दृष्टिकोण ऐसे ही एक निर्माण करने के लिए कर सकते हैं सुझाव CanConvert
विधि?
बहुत बहुत धन्यवाद!
संपादित करें (1): उपयोगकर्ता के मामले/समस्या इस प्रकार है: एक कुछ कोड के उपभोक्ता द्वारा पारित देखते हुए (मेरे अन्य स्वयं, लेकिन वह अप्रासंगिक है), (1) की जाँच करें कि कुछ एक नंबर है (काफी आसान) और (2) स्थान कुछ "सबसे छोटे" संख्यात्मक प्रकार में जहां यह डेटा हानि के बिना फिट बैठता है।
कुछ पृष्ठभूमि: मैं जो करने की कोशिश कर रहा हूं उसकी प्रकृति तकनीकी से अधिक गणितीय है: मैं यह देखने की कोशिश कर रहा हूं कि मैं मौजूदा संख्यात्मक प्रकारों को किसी प्रकार के बीजगणितीय पदानुक्रम में कैसे फिट कर सकता हूं Monoid = > समूह => अंगूठी => फ़ील्ड (या इसका सरलीकृत संस्करण)। इस पर काम करते हुए, और यह सुनिश्चित नहीं करते कि, "एक चीज़ दूसरे के लिए प्रेरित हुई" और मैंने खुद को टाइप रूपांतरणों से निपटने के लिए पाया ...
पुन: आपका संपादन - मैं वास्तव में इनलाइन संपीड़न एल्गोरिदम के हिस्से के रूप में ऐसा कुछ करता हूं। मेरी विधि? 'लम्बी' से शुरू करें, इसे 'बाइट.मैक्सवैल्यू' के विरुद्ध तुलना करें, फिर 'शॉर्ट.मैक्सवेल्यू', और फिर 'int.MaxValue', और इसे फिट करने वाले सबसे छोटे को डालें! – Aaronaught
मैं नीचे रोब द्वारा सुझाव के बाद इस तरह के कुछ समान कोशिश कर रहा हूं। वही विचार: प्री-डिफ़ाइंड ऑर्डर के बाद रूपांतरणों का प्रयास करें (मैं गणितीय कारणों के लिए हस्ताक्षरित किसी भी चीज़ से हस्ताक्षरित "छोटा" मानता हूं, भले ही स्मृति-वार यह सत्य न हो)। बीटीडब्लू: क्या आपके पास कोई वेब/ब्लॉग है जहां मैं आपके एल्गोरिदम की जांच कर सकता हूं? –