2016-07-01 3 views
1

У меня сложный вопрос:Получить значение элемента listBox после определенного символа

У меня есть ListBox с некоторыми элементами в нем. Каждый элемент имеет такую ​​структуру: string, double, double.

в коде:

listBox.Items.Add(name2.Text + " " + 
        Annuitätenrechner.zmErg.ToString("0.00") + "€" + " " + 
        Annuitätenrechner.zgErg.ToString("0.00") + "€"); 

Я хотел бы, чтобы сравнить последний двойной (zgErg) из пункта с последним дублем других элементов, а затем получить наименьшее значение всех элементов.

уже писал что-то, как это может быть, как:

private void bCompare_Click(object sender, RoutedEventArgs e) 
{ 
    // string ext = str.Substring(0, str.LastIndexOf("#") + 1); 

    var numbers = listBox.Items.Cast<object>().Select(obj => Convert.ToInt32(obj)); 

    foreach (int obj in numbers) 
    { 

    } 

    int min = numbers.Min(); 
} 
+0

name2.Text может содержать пространства? – Steve

ответ

1

Если name2 текстовое поле не содержит пробелы, то вы могли бы достичь список десятичных значений с помощью одной строки

var numbers = listBox.Items 
        .Cast<string>() 
        .Select(obj => decimal.Parse(obj.Split(' ')[2], 
            NumberStyles.Currency, CultureInfo.CurrentCulture)); 

конечно, получение минимального значения - это еще один маленький шаг

decimal minValue = listBox.Items 
         .Cast<string>() 
         .Select(obj => decimal.Parse(obj.Split(' ')[2], 
            NumberStyles.Currency, CultureInfo.CurrentCulture)) 
         .Min(); 

Обратите внимание, что y ou отформатировали ваши элементы списка с десятичной частью, поэтому считаю правильным извлечь значение с помощью методов десятичных типов.

В случае, если ваш name2 текстовое поле содержит пробелы, то код не следует использовать непосредственно второй элемент, возвращаемый методом Split, но использовать последний метод на массив, возвращаемый Split

var numbers = listBox.Items 
        .Cast<string>() 
        .Select(obj => decimal.Parse(obj.Split(' ') 
        .Last(),NumberStyles.Currency, CultureInfo.CurrentCulture)); 
Смежные вопросы