考慮下面的代碼:如何將代碼指定爲參數的代碼契約是Pure?
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
。如果參數的類型不是委託類型,並且即使是這樣,它也不會像我所期望的那樣工作,如上所述。
好的,這是一個解決方案,雖然不是很優雅,因爲這需要在代碼的其他部分鑄造代表,但可以,這是可以接受的。但是,當PureAttribute被分配給一個方法或委託時,它不會被檢查純粹性,它只是假設。那麼,爲什麼我不能指定一個委託參數爲Pure? – JBSnorro 2011-02-14 11:29:09