2011-06-30 3 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; } 
    } 
} 

Iは、ラインプロジェクトをコンパイルする "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来ます"));」エラーは発生しませんが、 "Contract.Requires(Methods.TestMethod4(d、x => x.TestData1、x => x.TestData2));"ありますか?

助けてください! :(

+0

私はこのバグを検討する。その様子から、それは非常によく 'Expression'ために生成されたコードを処理しません。おそらく、上の報告しますMSの接続 – leppie

+0

ありがとう、私はなります – Marco

+0

しかし、あなたは正しい(エラー)行を持っていることを確認してください最後のものを削除するとどうなりますか? –

答えて

関連する問題