2011-06-30 25 views
6

Bu hata ile saatlerce sorun giderme yapıyorum ve bunun neden olduğunu anlayamıyorum. Aşağıdaki kod göz önünde bulundurun:Neden Kod Sözleşmeleri "Malforme edilmiş sözleşme bulundu. Ödevden sonra gerektirir" parametrelerinde paramik anahtar yöntemiyle mi?

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; } 
    } 
} 

I hattı projesini derleme "Contract.Requires (Methods.TestMethod4 (d, x => x.TestData1 x => x.TestData2));" " "()

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

Contract.Requires Methods.TestMethod2 (" test1" ," test2);" Nasıl: Aşağıdaki derleme hatasına neden oluyor bir hata neden olmaz ama "Contract.Requires (Methods.TestMethod4 (d, x => x.TestData1, x => x.TestData2));" yapar?

Lütfen yardım edin! :(

+0

Bunun bir hata ele alacak. Göründüğü kadarıyla, çok iyi Expression' 'için oluşturulan kodu işlemez. Belki rapor MS connect – leppie

+0

Teşekkür ederim. – Marco

+0

Ama doğru (hata) çizgisine sahip olduğunuzdan emin olun. Sonuncuyu kaldırdığınızda ne olur? –

cevap