退出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#的一些概念是错误的,那么为什么在这种情况下不起作用呢?
您还没有在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)
{
...
}