参考类型未作为参考传递

时间:2010-08-04 11:17:12

标签: c#

我的单元测试中有这个奇怪的问题。请参阅以下代码

_pos = null;
Utilities.InitPOS(_pos, trans);
Assert.IsNotNull(_pos); //fails

InitPOS函数看起来像

public static void InitPOS(POSImplementation pos, Transaction newTransaction)
{
    pos = new POSImplementation();
    pos.SomeProp = new SomeProp();
    pos.SomeProp.SetTransaction(newTransaction);
    Assert.IsNotNull(pos);
    Assert.IsNotNull(pos.SomeProp);
}

对象POSImplementation是某个接口的实现,它是一个类,所以它是一个引用类型......

有什么想法吗?

3 个答案:

答案 0 :(得分:8)

您将对象的引用传递给InitPOS(即null引用),而不是对名为_pos的变量的引用。结果是新POSImplementation实例已分配给pos方法中的局部变量InitPOS,但_pos变量保持不变。

将您的代码更改为

_pos = Utilities.InitPOS(trans);
Assert.IsNotNull(_pos);

,其中

public static POSImplementation InitPOS(Transaction newTransaction)
{
    POSImplementation pos = new POSImplementation();
    // ...
    return pos;
}

答案 1 :(得分:1)

pos = new POSImplementation();

如果有人将pos传递给方法,那你在那里做什么?您是否错过了该参数的ref属性?

答案 2 :(得分:1)

通过引用传递 实例 , 您按价值 传递 参考。