Why is the code “Contract broken. Found“ Required after assignment ”found in the method with the params key?

I had a problem with this error for several hours, and I cannot understand why this is happening. Consider the following code:

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

When I compile the project, the line "Contract.Requires (Methods.TestMethod4 (d, x => x.TestData1, x => x.TestData2)); causes the following compilation error:

Broken contract. Found Requirement after appointment in the method "Contract. Program. Method (Contracts.Data)".

How did it happen "Contract.Requires (Methods.TestMethod2 (" test1 "," test2 ")); does not cause an error, but" Contract.Requires (Methods.TestMethod4 (d, x => x.TestData1, x => x.TestData2 )); "does?

Please, help!: (

+6
source share
1 answer

I posted the problem on the MSDN forums and they consider this a bug .

+2
source

Source: https://habr.com/ru/post/891739/


All Articles