このコントラクトを以下に記述すると、Visual Studio でエラーが表示されます。
Error 20 Malformed contract section in method '....get_Page'
問題はif
ブロック?
public int? Page
{
get
{
int? result = Contract.Result<int?>();
if (result != null)
Contract.Ensures(result >= 0);
return default(int?);
}
}
編集:
Lasse V. Karisen はコメントに投稿しました:
どうですか: Contract.Ensures(result == null || result >= 0);
?
はい、Karisen、以前にこれを試してみましたが、コンパイルされました。しかし、疑問が残ります:if
コントラクトを使用するときに s を持つことはできないのでしょうか?
私が抱えている別の問題は無知です(主に上記の例が機能することを考慮して)、結果の使用も含まれます:
public int IndexOf(T item)
{
Contract.Assert(item != null);
Contract.Assert((item as IEntity).ID > 0);
int result = Contract.Result<int>();
Contract.Ensures(result >= -1);
return default(int);
}