我有这个练习。我不知道问题是什么,但我一直在收到错误 - 有人可以帮我解决问题吗?
未处理的异常:System.InvalidCastException:无法转换类型为' System.String []'的对象键入' System.IConvertible'。
在System.Convert.ToInt32(对象值)
at exercise_4.Program.Main(String [] args)在D:\ Courses \ c#\ beginner \ visual studio \ section 6 exercise \ exercise 4 \ exercise 4 \ Program.cs:line 20
这是我的控制台中的内容
编写程序并要求用户提供逗号分隔数字列表(例如5,1,9,2,10)。如果列表为空或包含少于5个数字,则显示"无效列表"并要求用户重新尝试;否则,显示列表中的3个最小数字。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace exercise_4
{
class Program
{
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("write numbers seperated with coma");
var numbers = new List<int>();
var input = (Console.ReadLine());
var value = input.Split(',');
var conv =Convert.ToInt32(value);
numbers.Add(conv);
if (value.Length < 5)
{
Console.WriteLine("invalid list!! retry");
continue;
}
else
{
numbers.Sort();
Console.WriteLine(numbers[0] , numbers[1], numbers [2]);
}
}
}
}
}
感谢您的回答。
答案 0 :(得分:2)
Split方法返回一个字符串数组。抛出异常是因为以下语句尝试将string []强制转换为int:
var conv =Convert.ToInt32(value);
您应该按如下方式迭代并解析数组中的每个项目:
while (true)
{
Console.WriteLine("write numbers seperated with coma");
List<int> numbers = new List<int>();
var input = (Console.ReadLine());
var values = input.Split(',');
foreach (var value in values)
{
int number;
// If the input can be parsed to int, add it to numbers list.
if (int.TryParse(value, out number))
{
numbers.Add(number);
}
}
if (numbers.Count < 5)
{
Console.WriteLine("invalid list!! retry");
continue;
}
else
{
numbers.Sort();
numbers.Take(3)
.ToList()
.ForEach(number => Console.WriteLine(number));
}
}
答案 1 :(得分:2)
你可以替换它:
var values = input.Split(',');
到此:
var values = input.Split(',').Select(a => int.Parse(a)).OrderBy(a => a).Take(3);
它会给你三个最小的数字。