我在C#
中遇到输出参数问题我有以下功能:
public Financial Calculate(int dealerPricingID, int customerID, bool dealerPriceChanged, bool saving, int specialBidID, int promotionID, List<Item> outItems)
参数outItems是一个输出参数,在调用函数之前我只需用
初始化它var items = new List<Item>();
我认为,由于列表是引用类型,它应该在执行函数后最终修改(在函数中,列表中填充了计算中受影响的Item对象)。但是,它保持不变,并且在调试之后我看到函数项内部添加到集合中它只返回空。
我觉得我的一些C#概念错了,为什么这种情况不起作用呢?
答案 0 :(得分:1)
你没有在outItems
内重新初始化Calculate
,对吗?如果你只是修改元素,它应该工作正常。如果您将另一个List<Item>
分配给outItems
,则修改已复制的参考 。
public Financial Calculate(List<Item> outItems)
{
outItems.Add(new Item()); // fine
return new Financial();
}
public Financial Calculate(List<Item> outItems)
{
outItems = new List<Item>(); // wrong!
outItems.Add(new Item());
return new Financial();
}
如果您想传递对引用的引用,请使用ref
关键字。
答案 1 :(得分:1)
您是否初步确定了列表&lt;&gt;?
此外,添加out关键字也是一个好主意,因为它有助于提高可读性并强制执行所需的功能。
List<MyT> myList = new List<MyT>();
Caclulate(..., out myList);
...
public void Calculate(... , out List<MyT> aList)
{
...
}