为什么代码合同显示";合同格式不正确.分配后发现需要";在方法中使用params keywork

本文关键字:quot 合同 方法 keywork params 格式 显示 代码 不正确 分配 发现 | 更新日期: 2023-09-27 18:00:52

我已经解决了这个错误好几个小时了,我似乎不明白为什么会发生这种情况。考虑以下代码:

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.Fires(Methods.TestMethod4(d,x=>x.TestData1,x=>x.TestData2(;"导致以下编译错误:

合同格式不正确。在方法"Contracts.Program.method(Contracts.Data("中的分配后找到Requires。

为什么"Contract.Fires(Methods.TestMethod2("test1","test2"((;"不会导致错误,但"Contract.Frequires(Methods.TestMethod4(d,x=>x.TestData1,x=>x.TestData2((;("会导致错误?

请帮忙!:(

为什么代码合同显示";合同格式不正确.分配后发现需要";在方法中使用params keywork

我在MSDN论坛上发布了这个问题,他们认为这也是一个bug。