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

本文关键字:参数 列表 修改 输出 函数 退出 | 更新日期: 2023-09-27 18:26:46

我在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#的一些概念是错误的,那么为什么在这种情况下不起作用呢?

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

您还没有在Calculate中重新初始化outItems,是吗?如果您只是修改元素,它应该可以正常工作。如果将另一个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关键字。

您是否初始化了List<>?

此外,添加out关键字也是一个好主意,因为它有助于提高可读性并增强所需的功能。

List<MyT> myList = new List<MyT>();
Caclulate(..., out myList);
...
public void Calculate(... , out List<MyT> aList)
{
    ...
}