为什么if条件不检查空值

时间:2012-05-10 03:20:00

标签: c# .net string

我试图在我的var中检查null,但它会抛出“对象引用未设置为对象的实例”。

 private void GenerateImage()
    {
        //Webster.Client.Modules.Metadata.Helper test = new Webster.Client.Modules.Metadata.Helper();
         var selectedstory = Webster.Client.Modules.Metadata.Helper.SelectedStoryItem;

        if((selectedstory.Slug).Trim()!=null)
        {
         //if (!string.IsNullOrEmpty(selectedstory.Slug))
       //{

           if (File.Exists(pathToImage))
           {
              }
           else
           {
               this.dialog.ShowError("Image file does not exist at the specified location", null);
           }
       }
       else
       {
           this.dialog.ShowError("Slug is Empty,please enter the Slug name", null);
       }
    }

我知道selectedstory.Slug有空值,这就是我使用 if 条件进行检查的原因,但它在if条件下正在抛出。

有人可以告知检查的正确方法。

4 个答案:

答案 0 :(得分:9)

您无法在空引用上调用方法。取出.Trim()

答案 1 :(得分:6)

if((selectedstory.Slug).Trim()!=null)

将首先在字符串上调用Trim()方法,然后检查null。这是失败的部分:您正在尝试在空对象上调用实例方法。

你想要的是这样的:

if ( selectedstory != null && string.IsNullOrEmpty(selectedstory.Slug) )

答案 2 :(得分:6)

试试这个:

if (!string.IsNullOrWhiteSpace(selectedstory.Slug))

这样就无需在您正在检查的属性上调用Trim。

答案 3 :(得分:0)

这就是我最终想出来的

    try
        {

            if (!string.IsNullOrWhiteSpace(selectedstory.Slug))
            {

                if (File.Exists(pathToImage))
                {
                    string SlugName = selectedstory.Slug;
                    if (pathToImage.Contains(SlugName))
                    {

                    }
                    else
                    {
                        this.dialog.ShowError("Image file name is not same as Slug name", null);
                    }
                }
                else
                {
                    this.dialog.ShowError("Image file does not exist at the specified location", null);
                }

            }
          }
        catch (Exception ex)
        {
            this.dialog.ShowError("Slug is Empty,please enter the Slug name", null);

        }
    }