我遇到了一个棘手的问题:
我有一个包含一些项目的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 :(得分: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));