C# 向列表中添加项目时出现无效的强制转换错误<;双倍>;
我有一个问题。我正在使用Visual Studio用c#编写一个应用程序。在应用程序中,我有一个带有products、price和quantity列的dataTable。对于每一列,我都试图保存列表中数据表中的所有行。例如: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
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.AllowThousands, 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"]));