Code Contracts. Форматирование сообщения о нарушении.
От: MxMsk Португалия  
Дата: 07.10.10 12:17
Оценка:
Доброго времени суток!

Знакомясь с контрактами, наткнулся на ситуацию, которую не знаю как разрулить. Код простой:
public static object Get(Exception ex)
{
    Contract.Requires<ArgumentNullException>(ex != null);

    if (!Exists(ex))
    {
        throw new InvalidOperationException(String.Format(MyErrorMessage, ex));
    }

    return ex.Data[MyKey];
}

[Pure]
public static bool Exists(Exception ex)
{
    ...
}


Хочу втащить Exists(ex) в контракт. Как-то так:
public static object Get(Exception ex)
{
    Contract.Requires<ArgumentNullException>(ex != null);
    Contract.Requires<InvalidOperationException>(Exists(ex), String.Format(MyErrorMessage, ex));

    return ex.Data[MyKey];
}


Но получаю сообщение User message to contract call can only be string literal, or a static field, or static property that is at least internally visible. А мне в данном случае хочется не просто сказать, что контракт нарушен, а еще показать для каких входных данных он нарушен. Понятно, что такая возможность будет работать только в runtime, но именно она и нужна. Можно как-нибудь побороть и использовать String.Format в сообщении?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.