Рассмотрим следующий код:
int SomeField;
void Foo([Pure] Func<int, object> getData)
{
Contract.Requires(getData != null);
Contract.Requires(getData(this.SomeField) != null);
}
Я получаю следующее предупреждение:
Обнаружен вызов метода 'System.Func'2<System.Int32,System.Object>.Invoke(System.Int32)
' без [Pure]
в контрактах метода '.... Foo(System.Func'2<System.Int32,System.Object>)
'
Это предупреждение имеет смысл. Но я все еще хотел бы вызвать делегата в контрактах и не получать предупреждение (предположим, у меня предупреждения превратились в ошибки). Как мне этого добиться?
Я попробовал атрибут Pure
, как показано в примере, но это не работает.
Я также хотел бы знать, почему PureAttribute
можно указать в параметрах. Не имеет смысла, если тип параметра не является типом делегата, и даже если это так, он не будет работать так, как я ожидал, как я уже говорил выше.