Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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#_List_For Loop_Casting_Double - Fatal编程技术网

C# 向列表中添加项目时出现无效的强制转换错误<;双倍>;

C# 向列表中添加项目时出现无效的强制转换错误<;双倍>;,c#,list,for-loop,casting,double,C#,List,For Loop,Casting,Double,我有一个问题。我正在使用Visual Studio用c#编写一个应用程序。在应用程序中,我有一个带有products、price和quantity列的dataTable。对于每一列,我都试图保存列表中数据表中的所有行。例如: List<string> products = new List<string>(); for (int i = 0; i < dt.Rows.Count; i++) { products.Add(dt.Rows[i]["product

我有一个问题。我正在使用Visual Studio用c#编写一个应用程序。在应用程序中,我有一个带有products、price和quantity列的dataTable。对于每一列,我都试图保存列表中数据表中的所有行。例如:

List<string> products = new List<string>();
for (int i = 0; i < dt.Rows.Count; i++)
{
    products.Add(dt.Rows[i]["products"].ToString());               
}
List products=newlist();
对于(int i=0;i
这段代码运行良好。问题是当我试图将列price中的数据保存到double list中时。我尝试了很多方法,但没有一种是正确的。我想做的是。 比如说

List<double> prices = new List<double>(); 
for (int i = 0; i < dt.Rows.Count; i++)
{
    prices.Add((double)dt.Rows[i]["price"]);
}
List prices=新列表();
对于(int i=0;i
我总是收到一个错误,说
指定的强制转换无效
。我还尝试了使用
双解析
,其中显示:
输入字符串的格式不正确

我所要做的就是将数据表中的数据存储到双列表中

尝试使用
修剪
,在修剪之前或之后可能会有空间

prices.Add(Convert.ToDouble(dt.Rows[i]["price"].ToString().Trim(),
          System.Globalization.CultureInfo.InvariantCulture));
使用linq,您可以按如下方式执行此操作(使用System.linq添加

试一试

然后


您必须使用
Convert.ToDouble
功能:

prices.Add(Convert.ToDouble(dt.Rows[i]["price"]));
如果仍然收到错误消息,则可能是区域性问题。
当您的价格使用十进制分隔符
,“
而不是
,或者您有一些千位分隔符(例如
“1523.25”
)时,您可能还必须将区域性定义为
转换的第二个参数。ToDouble

dt.Rows[i][price]的值是多少
调试代码的确切时间?打印出要转换为double的项目,并检查是否没有空字符串、空字符串、空格或格式不正确的数字字符串。数据库中的price是什么类型的?
Parse
是个好主意!由于“输入字符串的格式不正确”,您是否检查了输入字符串的实际格式?可能句点
和/或逗号
的使用方式超出了.NET文化的预期?可能存在一些字符,例如货币指示符,如
$
USD
或其他一些字符。价格以逗号表示,例如9,8。这可能是个问题吗。应该与点一起出现?是否确实要使用
(double)s
语法将字符串
s
转换为
double
?编辑:如果
Trim()
实际上在范围内,因为它的返回类型是
string
,则转换为
双精度
将是编译时错误。但是
Trim()
几乎无效,因为编译时类型可能是
object
(?)。对于linq,我仍然会得到相同的错误。最后一个带有numberStyles的代码看起来很正确,但是当我复制代码时,我得到了一个错误:“numberStyles”、“CultureInfo”这个名称在当前代码中不存在contex@user3201743增加使用制度。全球化@Rok根据您对问题的评论(而非本答案)提供的信息,您是否希望将
“9,8”
(九个逗号八)解析为
98
(九十八)?因为如果允许使用千个分隔符并使用
不变量区域性
,逗号或多或少会被忽略。不起作用。获取错误输入字符串的格式不正确。@user3201743请显示数据库中“dt.Rows[i][“price”]”中的数据。我已将price数据设置为数据类型money。在datatable中,从数据库读取的数据如示例9、8所示,带有.Hmm。。我复制了您的代码,但我收到一个错误,错误'object'不包含'Trim'的定义,并且找不到接受'object'类型的第一个参数的扩展方法'Trim'(是否缺少using指令或程序集引用)。抱歉,您必须在Trim之前添加.ToString(),如Answare中所示
prices.Add(double.Parse(dt.Rows[i]["price"].ToString(),NumberStyles.AllowThousa‌​nds, CultureInfo.InvariantCulture));
 using System.Text.RegularExpressions;
 prices.Add(Convert.ToDouble(Regex.Match(dt.Rows[i]["price"].ToString().Trim(), 
                   @"\d+").Value, CultureInfo.InvariantCulture));;
prices.Add(Convert.ToDouble(dt.Rows[i]["price"]));