C# 引用类型未作为引用传递

C# 引用类型未作为引用传递,c#,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

我在单元测试中遇到了这个奇怪的问题。请参阅下面的代码

_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
是某个接口的实现,它是一个类,因此它是一个引用类型

有什么想法吗

pos = new POSImplementation();

如果有人已经将
pos
传递到方法中,您在那里做什么?您是否缺少该参数的
ref
属性?

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

将代码更改为

_pos = Utilities.InitPOS(trans);
Assert.IsNotNull(_pos);
在哪里


不通过引用传递实例
您通过值传递引用

+1:请参阅Jon Skeet的“参数传入C#”,以获取对此的完整解释。是的,我知道这是一个解决方案,但我不知道哪里出了问题。现在我知道了,谢谢+1 Ref确实解决了这个问题。我也知道我做错了什么
public static POSImplementation InitPOS(Transaction newTransaction)
{
    POSImplementation pos = new POSImplementation();
    // ...
    return pos;
}