C# 按数值范围过滤List<int>时输出集合类型名的问题求解
问题修复方案
你的代码存在两处核心错误,修改后即可正常运行:
- 范围判断逻辑错误:你用了
||或运算符,只要满足大于下限/小于上限任意一个条件就会触发,和“数值处于上下限之间”的要求完全不符,需要换成&&与运算符,同时建议加上等于号适配包含上下限的常见需求,最终判断条件应为number >= lownum && number <= highnum - 输出对象错误:你在遍历的时候把整个
numbers列表对象传入了Console.WriteLine,所以控制台打印的是List的类型描述,要输出单个符合条件的元素,应该传入当前遍历到的number变量。
修复后可直接运行的代码
using System; using System.Collections.Generic; namespace exercise_69 { class Program { public static void Main(string[] args) { List<int> numbers = new List<int>(); // 录入数值直到输入-1停止 while (true) { int input = Convert.ToInt32(Console.ReadLine()); if (input == -1) { break; } numbers.Add(input); } Console.WriteLine("from where"); int lownum = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("where to"); int highnum = Convert.ToInt32(Console.ReadLine()); // 遍历输出符合范围的数值 foreach(int number in numbers) { if(number >= lownum && number <= highnum) { Console.WriteLine(number); } } } } }
按数值范围删除列表元素的方法
如果你需要直接把列表中不在范围内的元素删除,可以使用List自带的RemoveAll方法,不需要手动遍历判断删除,示例代码如下:
// 直接移除所有小于下限或大于上限的元素 numbers.RemoveAll(n => n < lownum || n > highnum); // 移除后直接遍历输出剩下的元素即可 foreach(var num in numbers) { Console.WriteLine(num); }
内容的提问来源于stack exchange,提问作者thugcat85
相关产品推荐
相关产品推荐

