将项目添加到List <double> </double>时出现无效的Cast错误

时间:2014-01-16 09:27:32

标签: c# list for-loop casting double

我有一个问题。我正在使用Visual Studio在c#中编写应用程序。在应用程序中,我有dataTable列产品,价格和数量。对于每一列,我试图从列表中的数据表中保存所有行。例如:

List<string> products = new List<string>();
for (int i = 0; i < dt.Rows.Count; i++)
{
    products.Add(dt.Rows[i]["products"].ToString());               
}

此代码工作正常。问题是当我尝试将列价格中的数据保存到双列表中时。我尝试了很多方法,但没有一个是正确的。我试图做的是。 例如

List<double> prices = new List<double>(); 
for (int i = 0; i < dt.Rows.Count; i++)
{
    prices.Add((double)dt.Rows[i]["price"]);
}

我总是收到错误Specified cast is not valid。我还尝试使用double parseinput string was not in correct format。 我想要做的就是将数据表中的数据存储到双列表中。

3 个答案:

答案 0 :(得分:1)

尝试

 using System.Text.RegularExpressions;

然后

 prices.Add(Convert.ToDouble(Regex.Match(dt.Rows[i]["price"].ToString().Trim(), 
                   @"\d+").Value, CultureInfo.InvariantCulture));;

答案 1 :(得分:0)

尝试Trim,您可能在

之前或之后有空格
prices.Add(Convert.ToDouble(dt.Rows[i]["price"].ToString().Trim(),
          System.Globalization.CultureInfo.InvariantCulture));

使用linq,您可以执行以下操作(添加using System.Linq;

List<double> doubles = dt.AsEnumerable()
                            .Select(r => r.Field<double>(1)) // assume price column index is 1
                            .ToList();

如果您的价格中包含空格,千位分隔符和货币符号等元素,则可以使用Double.Parse Method

如果您的价格有逗号,请尝试以下

prices.Add(double.Parse(dt.Rows[i]["price"].ToString(),NumberStyles.AllowThousa‌​nds, CultureInfo.InvariantCulture));

答案 2 :(得分:0)

您必须使用Convert.ToDouble功能:

prices.Add(Convert.ToDouble(dt.Rows[i]["price"]));

如果您仍然收到错误消息,则可能会出现文化问题。 如果您的价格使用小数分隔符","而不是".",或者您有一些分隔符(例如"1,523.25"),您可能还需要将Culture定义为{的第二个参数{1}}