2011-01-04 8 views
5

मैं जब मैं निम्नलिखित कोड पर कोड ठेके का उपयोग एक अपवाद हो रही है:कोड के साथ सशर्त गुण अपवाद संविदा

public void Debug(
      dynamic message1, 
      dynamic message2 = null, 
      dynamic message3 = null, 
      dynamic message4 = null, 
      dynamic message5 = null, 
      dynamic message6 = null) 
    { 
     Contract.Requires(message1 != null, 
      "First Logged Message cannot be null"); 
    } 
मैं परियोजना सेटिंग्स कॉन्फ़िगर कोशिश कर रहा हूँ

ताकि चेकों रन टाइम पर किया जाता है ।

अपवाद है "गतिशील रूप से विधि 'की आवश्यकता नहीं है' क्योंकि इसकी सशर्त विशेषता है"। मैंने कोड अनुबंध दस्तावेज दो बार दोबारा पढ़ा है और कुछ खोज किए हैं, लेकिन मुझे समझ में नहीं आता कि सशर्त विशेषता कहां से आ रही है।

उत्तर

11

आवश्यक विधि पर सशर्त विशेषता Conditional("CONTRACTS_FULL") है। जब आप अनुबंधों के साथ निर्माण करते हैं, तो CONTRACTS_FULL प्रतीक कंपाइलर को पास किया जाता है। मुझे लगता है कि आप सशर्त तरीकों के साथ गतिशील प्रेषण का उपयोग नहीं कर सकते हैं, क्योंकि यह रनटाइम के दौरान संकलित किया जाता है, और रनटाइम के पास इन प्रतीकों को संकलक को पास करने का कोई तरीका नहीं है। (केवल अनुमान है)।

आप शायद किसी ऑब्जेक्ट को स्थानीय (गैर-गतिशील) चर, संदेश को असाइन करके इसे वास्तव में आसान बना सकते हैं।

 object m1 = message1; 
    Contract.Requires(m1 != null, "First Logged Message cannot be null"); 
+0

यह काम करता था। धन्यवाद। –

1

मैं बजाय एक चर काम मैं एक वस्तु को गतिशील कास्ट करने के लिए शर्त तर्क की आवश्यकता में सक्षम था बनाने का एक ही मुद्दे पर में भाग गया।

dynamic message1; 
Contract.Requires((object)message1 != null,"First Logged Message cannot be null");