获取特定字符后的listBox项的值

时间:2016-07-01 11:52:17

标签: c# wpf 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();
} 

1 个答案:

答案 0 :(得分: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();

请注意,您已使用小数部分格式化了列表框项目,因此我认为使用小数类型方法提取值是正确的。

如果你的name2文本框包含空格,那么代码不应该直接使用Split方法返回的第二个项目,而是使用Split返回的数组上的Last方法

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