当前位置:  开发笔记 > 编程语言 > 正文

列表在方法C#中没有变化

如何解决《列表在方法C#中没有变化》经验,为你挑选了1个好方法。

我有一个班级Items,我尝试对项目列表进行排序:

private static void Sort(List items)
{
.
.
.
   SortDesc(items);
}

private static void SortDesc(List items)
{
  items = items.OrderByDescending(x => x.Neto).ToList();
}

当调试器输入时SortDesc(),列表中的项目按排序Neto DESC.当我继续并返回时Sort(),列表回到我打电话之前的状态SortDesc().

List由裁判默认发送,所以为什么这不是工作?

谢谢!



1> Farhad Jabiy..:

您正在更改内存中items使用以下代码行指向的引用:

 items = items.OrderByDescending(x => x.Neto).ToList();

在调用SortDesc方法时,列表对象通过引用传递.然后你正在创建新的列表.在此之后,您将其设置为items参数.在此之后,items指向新的引用,而不是前一个引用.但是,真实items仍然指向旧的.

因此,您必须返回新创建的列表:

private static List SortDesc(List items)
{
  return items.OrderByDescending(x => x.Neto).ToList();
}

然后,只需在您的Sort方法中设置它:

items = SortDesc(items);

PS:你也可以ref明确地使用关键字来获得所需的结果,但实际上这不是首选方式.(...void SortDesc(ref List items)).您可以从他对该问题的回答中读取 @JonSkeet的答案何时使用ref以及何时在C#中没有必要:

有用的答案:你几乎不需要使用ref/out.它基本上是一种获得另一个返回值的方法,通常应该被准确地避免,因为这意味着该方法可能试图做太多.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有