我正在创建一个Web应用程序,用于将excel文件导入MS Dynamics Crm。这是代码段
for (i = 0; i < dt.Rows.Count; i++)
{
if (dt.Rows[i][3].ToString() != String.Empty)
{
try
{
Entity contractline = new Entity("new_contractline");
contractline["new_lineitem"] = dt.Rows[i][1].ToString();
contractline["new_sublineitem"] = dt.Rows[i][3].ToString();
createChildData = service.Create(contractline);
string guidString = createChildData.ToString();
guidRecord[i] = guidString;
}
catch (Exception ex)
{
}
}
else if (dt.Rows[i][3].ToString() == string.Empty) /**THIS BLOK BELOW WON'T FIRE **/
{
try
{
Entity contractline = new Entity("new_contractline");
contractline["new_lineitem"] = dt.Rows[i][2].ToString();
contractline["new_sublineitem"] = dt.Rows[i][3].ToString();
contractline["new_quantity"] = "33";
service.Create(contractline);
}
catch (Exception ex)
{
}
}
问题是当else if
为空时, dt.Rows[i][3]
块无法触发。可能是什么问题呢?
答案 0 :(得分:2)
为什么不做else
?如果你没有任何其他的ifs。
if (dt.Rows[i][3].ToString() != String.Empty)
如果.ToString()
为空,将触发。但是,如果dt.Rows[i][3]
为空,则您将在此处获得异常,因为您无法在空对象上ToString()
。如果您在此代码块之外有try catch,我建议您查看它,因为dt.Rows[i][3]
可能为null并且它正在抛出异常。
如果你有其他任何其他的ifs,你应该使用
else if (string.IsNullOrWhiteSpace(dt.Rows[i][3].ToString()))
并更改你的if块(实际上我建议你在任何情况下都这样做)
if (!string.IsNullOrWhiteSpace(dt.Rows[i][3].ToString()))
原因是并非所有空格实际上都是空格键字符。你可能会得到其他white space characters,它不会触发你的String.Empty块,因为它不是空的。这将匹配您的单元格可能具有的多个空格。这也将捕获不可见的非空格键空格。一个例子是HTML代码
(非破坏空间)的等价物,它实际上不是空格键空间(并且不匹配&#34;&#34;)但会占用空间。
答案 1 :(得分:0)
只需使用If ... Else with string.IsNullOrEmpty(s)如下....
if (string.IsNullOrEmpty(dt.Rows[i][3].ToString()) == true)
{
// True.
Console.WriteLine("Null or empty");
}
else
{
Console.WriteLine("Not null and not empty");
}
答案 2 :(得分:0)