我这里有一个小问题。当我尝试执行以下步骤时,
string set1="123.10,134.40";
string set2="17,134";
List<string> List1 = new List<string>(set1.Split(','));
List<string> List2 = new List<string>(set2.Split(','));
var QueryResult = from D1 in List1
from E1 in List2
select new
{
D1,
E1
};
DataTable tempDT = new DataTable();
tempDT.Columns.Add("Data1", typeof(int));
tempDT.Columns.Add("Data2", typeof(string));
foreach (var item in QueryResult)
{
tempDT.Rows.Add(new object[] {Convert.ToInt32(item.E1.ToString()),
Convert.ToString(item.D1.ToString()) });
}
当我尝试将这些值添加到tempDT
时,我收到了异常:
输入字符串的格式不正确。
如何解决此问题?
答案 0 :(得分:9)
这是因为您在包含小数字符的字符串上使用Convert.ToInt32。
答案 1 :(得分:3)
您发布的代码工作正常,因此这意味着您的实际数据存在问题。
最有可能的是,你有这样的事情:
string set2="17,134,,20";
表示会导致代码崩溃的空项目。
使用以下内容删除此类空白项目:
List<string> List2 = new List<string>(set2.Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries));
要完全避免该错误,请改用TryParse:
int e1;
foreach (var item in QueryResult)
{
if (Int32.TryParse(item.E1, out e1))
{
tempDT.Rows.Add(new object[] { e1, item.D1 });
}
}
这将忽略任何无效值,而不是将它们添加到数据表中。