I've been troubleshooting with this error for hours and I can't seem to understand why this happens. 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:
Malformed contract. Found Requires after assignment in method 'Contracts.Program.Method(Contracts.Data)'.
How come "Contract.Requires(Methods.TestMethod2("test1", "test2"));" doesn't cause an error but "Contract.Requires(Methods.TestMethod4(d, x => x.TestData1, x => x.TestData2));" does?
Please help! :(
I posted the problem on the MSDN forums and they think it's a bug too.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With