输入字符串的格式不正确

时间:2011-08-25 14:45:24

标签: c# parsing

我这里有一个小问题。当我尝试执行以下步骤时,

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时,我收到了异常:

  

输入字符串的格式不正确。

如何解决此问题?

2 个答案:

答案 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 });
    }
}

这将忽略任何无效值,而不是将它们添加到数据表中。