退出C#中的函数后,不修改输出列表参数

时间:2012-03-06 12:04:19

标签: c#

我在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#概念错了,为什么这种情况不起作用呢?

2 个答案:

答案 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)
{
    ...
}