如何为 out 参数指定 Ensures?
How to specify Ensures for out parameter?
我有一个带有 out
参数的方法,我想使用 Contract.Ensures()
指定当方法 return 时,参数将不会是 null
。
基本上,这个:
void M(out object o)
{
Contract.Ensures(o != null);
o = new object();
}
这不会编译,因为看起来参数在分配之前会被读取:
error CS0269: Use of unassigned out parameter 'o'
我以为我可以通过换行来解决这个问题,但这也不起作用:
warning CC1005: CodeContracts: Malformed contract. Found Ensures after assignment in method 'M(System.Object@)'.
有什么办法吗?
我不想将方法切换到 ref
。我不能 return 值而不是使用 out
,因为我遇到这个的实际方法已经有一个 return 值:bool TryGetValue(TKey1 key1, TKey2 key2, out TValue value)
.
Contract.ValueAtReturn
方法专门用于避免 C# 编译器在此处的错误。
Contract.Ensures(Contract.ValueAtReturn(out o) != null);
我有一个带有 out
参数的方法,我想使用 Contract.Ensures()
指定当方法 return 时,参数将不会是 null
。
基本上,这个:
void M(out object o)
{
Contract.Ensures(o != null);
o = new object();
}
这不会编译,因为看起来参数在分配之前会被读取:
error CS0269: Use of unassigned out parameter 'o'
我以为我可以通过换行来解决这个问题,但这也不起作用:
warning CC1005: CodeContracts: Malformed contract. Found Ensures after assignment in method 'M(System.Object@)'.
有什么办法吗?
我不想将方法切换到 ref
。我不能 return 值而不是使用 out
,因为我遇到这个的实际方法已经有一个 return 值:bool TryGetValue(TKey1 key1, TKey2 key2, out TValue value)
.
Contract.ValueAtReturn
方法专门用于避免 C# 编译器在此处的错误。
Contract.Ensures(Contract.ValueAtReturn(out o) != null);