如何指定确定输出参数?

时间:2016-07-01 20:12:25

标签: c# code-contracts

我有一个带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)

1 个答案:

答案 0 :(得分:5)

Contract.ValueAtReturn方法专门用于避免C#编译器的错误。

Contract.Ensures(Contract.ValueAtReturn(out o) != null);