C# 如果 for 循环中的其他内容不起作用

本文关键字:其他 不起作用 如果 for 循环 | 更新日期: 2023-09-27 18:36:13

我正在创建一个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)
        {
        }
    } 

问题是当dt.Rows[i][3]为空时,else if块没有触发。可能是什么问题?

C# 如果 for 循环中的其他内容不起作用

你为什么不做else?如果您没有其他假设。

if (dt.Rows[i][3].ToString() != String.Empty)

如果.ToString()为空,将触发。但是,如果dt.Rows[i][3]为 null,则您已经在此处获得异常,因为您无法ToString() null 对象。如果你在这个代码块之外有一个 try catch,我建议你检查一下,因为dt.Rows[i][3]可能是空的,它会抛出异常。

如果你有任何其他如果,你应该使用

else if (string.IsNullOrWhiteSpace(dt.Rows[i][3].ToString()))  

并更改您的 if 块(实际上我建议您在任何情况下都这样做)

if (!string.IsNullOrWhiteSpace(dt.Rows[i][3].ToString()))  

原因是并非所有空格实际上都是空格键字符。您可能会获得其他空格字符,这些字符不会触发您的 String.Empty 块,因为它不为空。这将匹配您的单元格可能具有的许多空格。这也将捕获不可见的非空格键空间。一个例子是相当于HTML代码&nbsp;(不间断空格),它实际上不是空格键空间(并且不会匹配"),但会占用空间。

只需使用 If...否则带字符串。IsNull或Empty(s)如下所示....

if (string.IsNullOrEmpty(dt.Rows[i][3].ToString()) == true)
{
    // True.
    Console.WriteLine("Null or empty");
}
else
{
    Console.WriteLine("Not null and not empty");
}

你在下面试过吗? 否则如果(dt.行[i][3]。ToString().修剪() == ")