Читайте числа из 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 ответа
Решение
Во-первых, вы переназначаете свой 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);
}
Вы могли бы сделать это так:
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);
}