C#将列表框项转换为double

时间:2017-12-13 13:23:43

标签: c# string listbox double

我正在尝试将foreach中的listbox.item转换为double,但它不起作用:

foreach (string row in listBoxOperation1.Items)
{
    double x = Convert.ToDouble(row);
}

我也尝试了Double.ParseDouble.TryParse但总是返回:输入字符串的格式不正确。

如果我添加:

listBoxProgram.Items.Add(row);

它提供以下值:

3999.0
3333.33
1111.11
666.66

2 个答案:

答案 0 :(得分:4)

好吧,如果你把它们添加为double,你只需要投射它们:

double x = (double) row;

如果您已将它们添加为字符串,则可能不会将.用作小数点分隔符,而是使用,。提供正确的CultureInfo,例如en-US

CultureInfo usCult = new CultureInfo("en-US");
double x;
string numberStr = (string) row;
bool validNumber = double.TryParse(numberStr, NumberStyles.Any, usCult, out x);

如果格式无效,则validNumber将为false,否则x将包含该值。

答案 1 :(得分:0)

我猜。如果行的类型为System.Data.DataRow,那么您当然无法将其转换为doubleDataRow无法转换为double。您首先必须将值存储在特定列

foreach (DataRow row in listBoxOperation1.Items) {
    object obj = row["MyColumn"];
    ...
}

现在,如果该项目的类型为double,则可以将其强制转换为:

var d = (double)obj;

如果是string类型,则需要将其转换为double

if (Double.TryParse((string)obj, out double d)) {
    // We have a double d.
} else {
    // Something went wrong (e.g. the column is empty).
}

在任何情况下,此行中row的类型都是必不可少的:

listBoxProgram.Items.Add(row); // Of which type is 'row'?