2012-09-15 16 views
5

से 'चेतावनी फेंकना' मैं एक उपकरण लिख रहा हूं जो कुछ फ़ाइलों को संसाधित करता है। इस टूल में कमांड लाइन इंटरफेस होगा लेकिन तीसरे पक्ष के कोड से क्लास लाइब्रेरी के रूप में भी इस्तेमाल किया जा सकता है। किसी त्रुटि से निपटने के लिए, मैंने बस एक अपवाद फेंक दिया। थर्ड-पार्टी कोड अपवाद को संभाल सकता है, और कमांड लाइन इंटरफ़ेस इसे प्रिंट कर सकता है और निरस्त कर सकता है। हालांकि, घातक त्रुटियों के अलावा, यह भी संभव है कि एक स्थिति उत्पन्न होती है जो घातक नहीं है और प्रक्रिया जारी रह सकती है, जिसके लिए मैं 'चेतावनी फेंकना' जारी रखना चाहता हूं।मेरे कोड

मैं चेतावनी से कैसे निपटूं, इस तरह से कि तृतीय-पक्ष कोड और कमांड लाइन इंटरफ़ेस दोनों इसके साथ कुछ कर सकते हैं?

+0

यह निराशाजनक है कि सी #/.NET के पास अन्य भाषाओं में मौजूद चेतावनियां बढ़ाने के लिए पारंपरिक प्रणाली नहीं है। पायथन में मैं 'चेतावनियां कर सकता हूं। चेतावनी ('कुछ संदेश') 'या' लॉगिंग। चेतावनी ('कुछ संदेश') 'और पता है कि मेरा संदेश कोड को कॉल करने के लिए दृश्यमान होने की संभावना है और इसके लेखक वैश्विक रूप से कॉन्फ़िगरेशन को कॉन्फ़िगर कर सकते हैं हैंडल और लॉग इन हैं। सी # में, एक समान प्रणाली नहीं है। आपको पता नहीं है कि लॉगिंग लाइब्रेरी, यदि कोई हो, तो कॉलिंग एप्लिकेशन का उपयोग कर रहा है, और यदि आपने किया तो शायद इसमें शामिल नहीं हो सका। क्या बाकि है? बस * प्रिंट * चेतावनी और उम्मीद है कि कुछ भी तोड़ नहीं है? –

उत्तर

2

आप इसके लिए भी अपवाद फेंकते हैं (माना जाता है कि त्रुटि की स्थिति वास्तव में असाधारण है - यह दुर्लभ होने की उम्मीद है)।

अपवाद हमेशा घातक नहीं होते हैं - आपको अपवाद के एक विशिष्ट प्रकार को फेंकने की आवश्यकता है कि तृतीय पक्ष कोड और कमांड लाइन कोड पकड़ और कार्य कर सकता है।

अपवाद हैंडलिंग का एक नियम उन अपवादों को संभालना है जिन्हें आप जानते हैं कि कैसे संभालना है - यदि आपके पास त्रुटि के लिए एक विशिष्ट अपवाद प्रकार है और आप इसे दस्तावेज़ करते हैं, तो क्लाइंट कोड को यह पता होना चाहिए कि इससे कैसे निपटना है (या नहीं)।


है कि आप क्या करने की कोशिश कर रहे हैं कोड का उपयोग करने के लिए जानकारी प्रदान की जाती है - चेतावनी है कि अपने पुस्तकालय के भीतर पहले से ही नियंत्रित किया जाता है, लेकिन उपयोगकर्ताओं को पता कर सकते हैं कि - आप उत्पादन निशान tracing सबसिस्टम का उपयोग कर सकते हैं। सभी उपयोगकर्ताओं को एक श्रोता को कॉन्फ़िगर करना होगा और रनटाइम के दौरान जानकारी प्राप्त करने में सक्षम होंगे।

+0

मुझे लगता है कि चेतावनी आमतौर पर इसका मतलब है कि सामान्य परिणाम वापस किया जाना चाहिए, लेकिन किसी भी तरह से चेतावनी संलग्न होनी चाहिए। लेकिन अगर आप अपवाद का उपयोग करते हैं, तो आप एक ही समय में एक मूल्य वापस नहीं कर सकते हैं। – svick

+1

@svick - निश्चित रूप से आप कर सकते हैं - कस्टम अपवाद वर्ग के साथ, आप जो भी अतिरिक्त गुण चाहते हैं उसे जोड़ सकते हैं। और ['अपवाद'] (http://msdn.microsoft.com/en-us/library/system.exception.aspx) इसके लिए स्वयं 'डेटा' केवीपी संपत्ति है। – Oded

3

मैं आपको अपवाद फेंकने का सुझाव नहीं दूंगा, यदि संभव हो तो उन्हें टालना चाहिए (वे संसाधन महंगे हैं)। इसके बजाय आप एक घटना बना सकते हैं और इसे बढ़ा सकते हैं। थर्ड पार्टी कोड और कमांड लाइन इंटरफेस को इस घटना पर हस्ताक्षर करने की आवश्यकता होगी।

+2

अच्छी सलाह। Googlers: यदि आप सोच रहे हैं "एक चेतावनी ट्रेस इस चेतावनी के लिए उपयोगी होगा", बस एक अपवाद का उपयोग करें। अपवाद प्रणाली अनिवार्य रूप से एक अत्यधिक उपकरण, महंगी घटना प्रणाली है। अगर चेतावनी दुर्लभ है (* और त्रुटि पुनर्प्राप्त करने योग्य है! *), शायद एक [कस्टम 'अपवाद'। (Https://msdn.microsoft.com/en-us/library/vstudio/ms229064%28v=vs का उपयोग करें .100% 29.aspx? च = 255 और MSPPError = -+२१४७२१७३९६)। साथ ही, 'चेतावनी अपवाद' का विस्तार न करें, क्योंकि यह 'सिस्टम अपवाद' को बढ़ाता है, और यह [सम्मेलन द्वारा आरक्षित है।] (Https://msdn.microsoft.com/en-us/library/vstudio/ms229007 (v = बनाम। 100) .aspx) – kdbanman

संबंधित मुद्दे