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;
}