2013-11-25 10 views
6

अनावश्यक कोड को कम करने के लिए, मैं कुछ फेंक सहायक तरीकों:विचार

protected static X ThrowInvalidOperation(string operation, X a, X b) { 
    throw new InvalidOperationException("Invalid operation: " + a.type.ToString() + " " + operation + " " + b.type.ToString()); 
} 

उपयोग: ऑपरेटर + हमेशा एक मान लौटाना चाहिए वजह से, मैं:

public static X operator +(X a, X b) { 
     if (...) { 
      return new X(...); 
     } 
     return ThrowInvalidOperation("+", a, b); 
    } 

समस्या ThrowInvalidOperation बनाकर इसे ठीक करें और इसे returnThrowInvalidOperation("+", a, b);

के साथ कॉल करें

वहां कई नुकसान हैं - एक ऐसा इसलिए है क्योंकि मैं इसे किसी भिन्न प्रकार की विधि से कॉल नहीं कर सकता।
मेरी इच्छा है कि हेल्पर फ़ंक्शन को चिह्नित करने का कोई तरीका है "हमेशा अपवाद फेंकता है", इसलिए संकलक वापसी मूल्यों को ट्रैक करना बंद कर देता है।

प्रश्न: मुझे यह काम करने के लिए क्या संभावनाएं हैं?

+1

क्या आपने ऑपरेटर कार्यान्वयन में फेंकते हुए, सहायक में अपवाद बनाने पर विचार किया है? उदाहरण के लिए। 'NewInvalidOperationException (...);' – Caramiriel

उत्तर

6

अपवाद करें:

protected static Exception MakeInvalidOperation(string operation, X a, X b) 
{ 
    return new InvalidOperationException(
     "Invalid operation: " + a.type + " " + operation + " " + b.type); 
} 

तो यह फेंक:

throw MakeInvalidOperation("+", a, b); 

आप अच्छी कंपनी में हैं:

// Type: Microsoft.Internal.Web.Utils.ExceptionHelper 
// Assembly: WebMatrix.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
// MVID: 3F332B40-45DB-42E2-A4ED-0826DE223A79 
// Assembly location: C:\Windows\Microsoft.NET\assembly\GAC_MSIL\WebMatrix.Data\v4.0_1.0.0.0__31bf3856ad364e35\WebMatrix.Data.dll 

using System; 

namespace Microsoft.Internal.Web.Utils 
{ 
    internal static class ExceptionHelper 
    { 
     internal static ArgumentException CreateArgumentNullOrEmptyException(string paramName) 
     { 
      return new ArgumentException(CommonResources.Argument_Cannot_Be_Null_Or_Empty, paramName); 
     } 
    } 
} 

हालांकि यह इतना कोड लिखने के लिए नहीं है अपने स्वयं का कस्टम Exception-आधारित प्रकार (या InvalidOperationException-आधारित) और def कुछ कन्स्ट्रक्टर खाएं जो आपके लिए एक संदेश प्रारूपित करता है।

अनावश्यक कोड

कम करने के लिए जब मैं इस सुना है, मुझे लगता है कि AOP जो काफी अच्छी तरह से PostSharp द्वारा कार्यान्वित किया जाता। यदि आपके पास बहुत सारे अनावश्यक कोड हैं तो आपको एओपी पर विचार करना चाहिए, लेकिन ध्यान रखें कि यह अधिक हो सकता है।

+1

केवल दो संभावनाएं हैं: मैं अपने काम के लिए बहुत बेवकूफ हूं * या * मैंने यह काम बहुत लंबा किया - समाधान बहुत आसान है ... – joe

+0

@joe के बारे में क्या एक तिहाई, पारस्परिक समावेशी समाधान? :) –

+1

@ टास्पीटिस: आप सही हैं - ये दिन बेहतर नहीं हैं घर छोड़ना – joe

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