Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#将列表框项转换为双精度_C#_String_Listbox_Double - Fatal编程技术网

C#将列表框项转换为双精度

C#将列表框项转换为双精度,c#,string,listbox,double,C#,String,Listbox,Double,我正在尝试将foreach中的列表框.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 111

我正在尝试将foreach中的
列表框.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

好吧,如果您将它们添加为
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
将包含该值。

我猜。如果行的类型为
System.Data.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).
}
在任何情况下,此行中的
行的类型
都是必不可少的:

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

那么,输入字符串是什么?什么是
?如果它是一个对象,
row.ToString()
会给你什么?只是猜测一下,它可能与区域性相关,请使用
Double.TryParse
尝试
InvariantCulture
。在中为每个对象使用listBoxOperation1,而在添加中使用listBoxProgram。这是故意的吗?row.ToString()给出了相同的错误。输入应该是一个字符串,它从一个文本文件读取到一个列表框中,然后我尝试使用这些值,并将它们按不同的目的进行排序。只使用点,将textbox转换为Double不是问题。具有相同值的文本是列表框,行是对象。如果这个对象是一个
DataRow
,列表框将为每个项目显示
System.Data.DataRow
,因为
DataRow
不会覆盖
ToString
。我得到var“row=(DataRow)item;”,然后我得到错误“无法将System.String转换为System.DataRow”正如你所知道的,我在C#方面有点新手。你从foreach循环中的
listBoxOperation1.items
中检索的项目与你用
listBoxProgram.items.Add(行)添加到其中的项目具有相同的类型。因此,我们需要知道您是如何在
listBoxProgram.Items.Add(row)中声明
row
变量的
有哪种类型?请出示
行的声明
。是
双排
字符串行
数据行行
或其他内容?它们作为字符串添加,但问题在于上面的答案中所述的十进制分隔符。由于某些原因,它在foreach循环和列表框中有问题,我在文本框中对此没有问题。非常感谢!这就解决了问题。我还添加了使用系统。全球化;