C#如果其他内部循环不起作用

时间:2016-02-26 04:03:04

标签: c# dynamics-crm-2011 dynamics-crm

我正在创建一个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] 块无法触发。可能是什么问题呢?

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代码&nbsp;(非破坏空间)的等价物,它实际上不是空格键空间(并且不匹配&#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)

你在下面试过吗?  否则if(dt.Rows [i] [3] .ToString()。Trim()==“”)