2011-06-30 15 views
6

मैं इस त्रुटि के साथ घंटों तक समस्या निवारण कर रहा हूं और मुझे समझ में नहीं आ रहा है कि ऐसा क्यों होता है। निम्नलिखित कोड पर विचार करें:पैरा अनुबंध कुंजीपटल के साथ विधि में "अनुबंधित अनुबंध। असाइनमेंट के बाद आवश्यक" क्यों दिखाता है?

using System; 
using System.Diagnostics.Contracts; 
using System.Linq.Expressions; 

namespace Contracts 
{ 
    class Data 
    { 
     public object TestData1 { get; set; } 
     public object TestData2 { get; set; } 
    } 

    class Program 
    { 
     static void Main() 
     { 
      Data d = new Data(); 
      Method(d); 
     } 

     static void Method(Data d) 
     { 
      Contract.Requires(Methods.TestMethod1("test")); 
      Contract.Requires(Methods.TestMethod2("test1", "test2")); 
      Contract.Requires(Methods.TestMethod3(d, x => x.TestData1)); 
      Contract.Requires(Methods.TestMethod4(d, x => x.TestData1, x => x.TestData2)); 
     } 
    } 

    static class Methods 
    { 
     [Pure] 
     public static bool TestMethod1(string str) { return true; } 

     [Pure] 
     public static bool TestMethod2(params string[] strs) { return true; } 

     [Pure] 
     public static bool TestMethod3<T>(T obj, Expression<Func<T, object>> exp) { return true; } 

     [Pure] 
     public static bool TestMethod4<T>(T obj, params Expression<Func<T, object>>[] exps) { return true; } 
    } 
} 

जब मैं परियोजना संकलन, लाइन "Contract.Requires (Methods.TestMethod4 (घ, एक्स => x.TestData1, एक्स => x.TestData2));" निम्नलिखित संकलन त्रुटि का कारण बनता है:

Malformed contract. Found Requires after assignment in method 'Contracts.Program.Method(Contracts.Data)'.

कैसे आ "Contract.Requires (Methods.TestMethod2 (" test1 "," test2 "));" त्रुटि का कारण नहीं है लेकिन "अनुबंध। अनुरोध करता है (तरीके। testMethod4 (डी, एक्स => x.TestData1, x => x.TestData2));" कर देता है?

कृपया मदद करें! :(

+0

मैं यह एक बग पर विचार करेंगे। इसके बारे में दिखता है से, यह बहुत अच्छी तरह से 'Expression' लिए बनाए गए कोड को संभाल नहीं है। शायद पर रिपोर्ट एमएस कनेक्ट। – leppie

+0

धन्यवाद, मैं करूँगा। – Marco

+0

लेकिन सुनिश्चित करें कि आपके पास सही (त्रुटि) रेखा है। जब आप उस अंतिम आवश्यकता को हटाते हैं तो क्या होता है? –

उत्तर