从txt读取数字并对它们进行排序 - 投射错误

时间:2017-06-18 09:51:29

标签: c# winforms

我想在txt文件中取数字,数字之间有空格,并在排序列表中生成。 但我得到了

  

无法转换类型为' System.String []'的对象输入' System.IConvertible'。错误

using (OpenFileDialog ofd = new OpenFileDialog() { Filter = "Text Dosyası(*.txt)|*.txt", ValidateNames = true, Multiselect = false })
{
    if (ofd.ShowDialog()==DialogResult.OK)
    {
        string[] lines = File.ReadAllLines(ofd.FileName);
        List<Double> list = new List<Double>();

        foreach (string s in lines)
        {
            //int nmbr = 0;
            lines = s.Split(new char[] { }, StringSplitOptions.RemoveEmptyEntries);
            list.Add(Convert.ToDouble(lines));
            listfile.Items.Add((Convert.ToDouble(lines)));

        }

        list.Sort();
        foreach (Double x in list)
        {
            listBox1.Items.Add(x);
        }

2 个答案:

答案 0 :(得分:0)

首先,您要在lines语句中重新分配foreach变量,这是不正确的。

其次,您正在尝试转换值数组,而不是自己转换每个值。

foreach (string s in lines)
{
    //int nmbr = 0;
    var numbers = s.Split(new char[] { }, StringSplitOptions.RemoveEmptyEntries);
    foreach(var number in numbers)
    {
        var convertedNumber = Convert.ToDouble(number);
        list.Add(convertedNumber);
        listfile.Items.Add(convertedNumber);
    }
 }

要按降序对检索到的值进行排序,您可以执行以下操作:

list = list.OrderByDescending(x => x).ToList();

获得排序列表后,您可以填充列表框

foreach (Double x in list)
{
    listBox1.Items.Add(x);
}

答案 1 :(得分:0)

你可以这样做:

List<double> list =
    File
        .ReadAllLines(ofd.FileName)
        .SelectMany(line => line.Split(' '))
        .Select(double.Parse)
        .OrderBy(x => x)
        .ToList();

foreach (double x in list)
{
    listBox1.Items.Add(x);
}