如何告诉代码合同指定为参数的委托是Pure?

JBS*_*rro 5 c# parameters delegates code-contracts

请考虑以下代码:

int SomeField;
void Foo([Pure] Func<int, object> getData)
{
    Contract.Requires(getData != null);
    Contract.Requires(getData(this.SomeField) != null);
}
Run Code Online (Sandbox Code Playgroud)

我收到以下警告:

在方法合同中检测到对方法的调用' System.Func'2<System.Int32,System.Object>.Invoke(System.Int32)' '[Pure]Foo(System.Func'2<System.Int32,System.Object>)

这个警告非常有意义.但是我还是想在合同中给代表打电话而不是警告(假设我的警告变成了错误).我如何实现这一目标?

我尝试了该属性Pure,如示例所示,但这不起作用.

我也想知道为什么PureAttribute可以在参数上指定.如果参数的类型不是委托类型是没有意义的,即使它是,它也不像我期望的那样工作,如上所述.