Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 输入字符串的格式不正确_C#_Parsing - Fatal编程技术网

C# 输入字符串的格式不正确

C# 输入字符串的格式不正确,c#,parsing,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

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

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()) });
}
string set1=“123.10134.40”;
字符串set2=“17134”;
List1=新列表(set1.Split(',');
List2=新列表(set2.Split(',');
var QueryResult=来自列表1中的D1
来自列表2中的E1
选择新的
{
D1,
E1
};
DataTable tempDT=新DataTable();
添加(“数据1”,类型(int));
添加(“数据2”,类型(字符串));
foreach(QueryResult中的var项)
{
Add(新对象[]{Convert.ToInt32(item.E1.ToString()),
Convert.ToString(item.D1.ToString())});
}
当我尝试将这些值添加到
tempDT
时,我遇到了一个异常:

输入字符串的格式不正确


如何解决此问题?

这是因为您正在对包含十进制字符的字符串使用Convert.ToInt32。

您发布的代码工作正常,因此这意味着问题在于实际数据

最有可能的情况是,您有以下情况:

string set2="17,134,,20"; 
意味着空项将使代码崩溃

用以下方法移除此类空项:

List<string> List2 = new List<string>(set2.Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries));

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

这很可能来自
Convert.ToInt32
,那么
item.E1
看起来像什么?它是一个可以转换成数字的字符串吗?整个堆栈跟踪是什么?而且E1和D1都已经是字符串,因此不需要调用
ToString
。当您尝试将“item.E1”转换为Int 32时,“System.FormatException”的值是多少?user code Message=“Input string格式不正确”未处理。您不必对此提出疑问。我很确定这就是问题所在:)
int e1;
foreach (var item in QueryResult)
{
    if (Int32.TryParse(item.E1, out e1))
    {
        tempDT.Rows.Add(new object[] { e1, item.D1 });
    }
}