我有一个问题。我正在使用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 parse
:input string was not in correct format
。
我想要做的就是将数据表中的数据存储到双列表中。
答案 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.AllowThousands, CultureInfo.InvariantCulture));
答案 2 :(得分:0)
您必须使用Convert.ToDouble
功能:
prices.Add(Convert.ToDouble(dt.Rows[i]["price"]));
如果您仍然收到错误消息,则可能会出现文化问题。
如果您的价格使用小数分隔符","
而不是"."
,或者您有一些分隔符(例如"1,523.25"
),您可能还需要将Culture定义为{的第二个参数{1}}