Баг в Code Contracts и workaround
От: nikov США http://www.linkedin.com/in/nikov
Дата: 17.07.09 16:02
Оценка: 17 (3)
На этом коде неожиданно получаем 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)
    {
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.