Почему Code Contracts показывает «Неверный контракт. Найдено, что требуется после назначения »в методе с ключом params?

Я несколько часов устранял эту ошибку и не могу понять, почему это происходит. Рассмотрим следующий код:

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 (d, x => x.TestData1, x => x.TestData2));» вызывает следующую ошибку компиляции:

Неправильный контракт. Найдено Требуется после присваивания в методе 'Contracts.Program.Method (Contracts.Data)'.

Почему "Contract.Requires (Methods.TestMethod2 (" test1 "," test2 "));" не вызывает ошибку, но "Contract.Requires (Methods.TestMethod4 (d, x => x.TestData1, x => x.TestData2));" есть?

Помогите, пожалуйста! : (

6
задан Marco 30 June 2011 в 15:48
поделиться