我正在尝试将foreach中的listbox.item
转换为double,但它不起作用:
foreach (string row in listBoxOperation1.Items)
{
double x = Convert.ToDouble(row);
}
我也尝试了Double.Parse
和Double.TryParse
但总是返回:输入字符串的格式不正确。
如果我添加:
listBoxProgram.Items.Add(row);
它提供以下值:
3999.0
3333.33
1111.11
666.66
答案 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
,那么您当然无法将其转换为double
。 DataRow
无法转换为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'?