На этом коде неожиданно получаем NullReferenceException, потому что ccrewrite сгенерировал доступ к неинициализированной локальной переменной.
using System;
using System.Diagnostics.Contracts;
class A
{
static void Main()
{
Foo(true, 1);
}
static void Foo(bool b, int x)
{
Contract.Requires(x > 0);
if (b)
{
Bar(() => x);
}
}
static void Bar(Func<int> f)
{
}
}
Workaround такой:
using System;
using System.Diagnostics.Contracts;
class A
{
static void Main()
{
Foo(true, 1);
}
static void Foo(bool b, int x)
{
Contract.Requires(x > 0);
if (b)
{
int temp = x;
Bar(() => temp);
}
}
static void Bar(Func<int> f)
{
}
}