c# 集合类型作为方法参数
开发中经常会对集合进行排序,如果把排序方法写在另一个方法里,集合作为方法参数时需要注意。
public void Test()
{
var a = new List<int>() { 1, 8, 4, 9 };
Sort1(a);
Console.WriteLine("集合赋值 " + String.Join(",", a));
}
private void Sort1(List<int> nums)
{
nums = nums.OrderByDescending(p => p).ToList();
}
最后输出结果依旧是 1, 8, 4, 9 并没有达到排序效果。
这是因为 List 是引用类型,即保存地址的值变量,List做为方法的参数时,nums是引用副本,方法内的内存地址和方法外的内存地址时一样的,如果方法内的nums重新赋值也就是引用地址指向变了,那内外的参数就不一致了,所以不会影响方法外的nums的值。 如果不想使用副本,想直接使用方法外的原引用地址的值变量,就可以使用 ref来处理。或者对集合内部的项做处理,包括索引赋值,使用数组的Sort方法,sort方法的内部实现也是索引赋值。
public void Test()
{
var a = new List<int>() { 1, 8, 4, 9 };
Sort1(a);
Console.WriteLine("集合赋值 " + String.Join(",", a));
var b = new List<int>() { 1, 8, 4, 9 };
Sort2(b);
Console.WriteLine("集合项赋值 " + String.Join(",", b));
var c = new List<int>() { 1, 8, 4, 9 };
Sort3(c);
Console.WriteLine("数组排序 " + String.Join(",", c));
var d = new List<int>() { 1, 8, 4, 9 };
Sort4(ref d);
Console.WriteLine("ref 排序" + String.Join(",", d));
}
private void Sort1(List<int> nums)
{
nums = nums.OrderByDescending(p => p).ToList();
}
private void Sort2(List<int> nums)
{
var newNums = nums.OrderByDescending(p => p).ToList();
for (int i = 0; i < nums.Count; i++)
{
nums[i] = newNums[i];
}
}
private void Sort3(List<int> nums)
{
nums.Sort((x, y) => x - y);//从小到大
}
private void Sort4(ref List<int> nums)
{
nums = nums.OrderByDescending(p => p).ToList();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!