VS 2019 中 Action/Func 代表的问题
Problem with Action/Func delegates in VS 2019
我尝试编写一个程序,从控制台读取一系列数字,然后按排序顺序仅打印偶数。问题是,当我尝试从委托中的数组中删除一个数字时,它不起作用。我知道有更简单的方法来制作程序,但我想了解更多有关委托和事件的信息。如果你们能帮我解决这个问题(或者有关于这个话题的任何信息),那将非常有帮助。谢谢!!!
我的代码:
Func<int, bool> checkIfEven = num => num % 2 == 0;
Action<int[]> sortArray = arr => Console.WriteLine(arr.Max() + " ");
Func<List<int>, int> findMaxIndex = num => num.IndexOf(num.Max());
int[] numbers = Console.ReadLine().Split(" ").Select(int.Parse).Where(checkIfEven).ToArray();
Action<List<int>> removeMax = list => list.RemoveAt(findMaxIndex(numbers.ToList()));
while (numbers.Length>0)
{
sortArray(numbers);
removeMax(numbers.ToList());
}
问题出在这一行:
removeMax(numbers.ToList());
此调用:numbers.ToList()
从 numbers
数组创建一个 新列表 ,因此当调用 removeMax
时它会从列表中删除一个元素这是数组 的副本 numbers
而不是 numbers
数组本身,因为它可能是预期的。
我尝试编写一个程序,从控制台读取一系列数字,然后按排序顺序仅打印偶数。问题是,当我尝试从委托中的数组中删除一个数字时,它不起作用。我知道有更简单的方法来制作程序,但我想了解更多有关委托和事件的信息。如果你们能帮我解决这个问题(或者有关于这个话题的任何信息),那将非常有帮助。谢谢!!!
我的代码:
Func<int, bool> checkIfEven = num => num % 2 == 0;
Action<int[]> sortArray = arr => Console.WriteLine(arr.Max() + " ");
Func<List<int>, int> findMaxIndex = num => num.IndexOf(num.Max());
int[] numbers = Console.ReadLine().Split(" ").Select(int.Parse).Where(checkIfEven).ToArray();
Action<List<int>> removeMax = list => list.RemoveAt(findMaxIndex(numbers.ToList()));
while (numbers.Length>0)
{
sortArray(numbers);
removeMax(numbers.ToList());
}
问题出在这一行:
removeMax(numbers.ToList());
此调用:numbers.ToList()
从 numbers
数组创建一个 新列表 ,因此当调用 removeMax
时它会从列表中删除一个元素这是数组 的副本 numbers
而不是 numbers
数组本身,因为它可能是预期的。