我有一个带out
参数的方法,我希望使用Contract.Ensures()
指定当方法返回时,参数不会是null
。
基本上,这个:
void M(out object o)
{
Contract.Ensures(o != null);
o = new object();
}
这不会编译,因为看起来参数会在分配之前被读取:
错误CS0269:使用未分配的输出参数' o'
我以为我可以通过切换线来解决这个问题,但这也不起作用:
警告CC1005:CodeContracts:格式错误的合同。在方法' M(System.Object @)'。
中分配后找到保证
有没有办法做到这一点?
我不想将方法切换为ref
。我无法返回值而不是使用out
,因为我遇到此实际的方法已经有一个返回值:bool TryGetValue(TKey1 key1, TKey2 key2, out TValue value)
。
答案 0 :(得分:5)
Contract.ValueAtReturn
方法专门用于避免C#编译器的错误。
Contract.Ensures(Contract.ValueAtReturn(out o) != null);