2012-05-10 65 views
2

我試圖檢查我的var中的空值,但它拋出「對象引用未設置爲對象的實例。」爲什麼if條件不檢查空值

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條件扔在那裏。

有人可以請告知什麼是正確的方法來檢查。

+1

C#應該有一個[安全導航操作符(http://groovy.codehaus.org/Operators#Operators-SafeNavigationOperator)有一個建議上C#但它[尚未實現](https://connect.microsoft.com/VisualStudio/feedback/details/192177/a-bit-more-c-syntactic-sugar-for-nulls)一些進取的用戶[一個] (http://code.logos.com/blog/2008/01/nullpropagating_extension_meth.html),當他們不能等待時 –

+0

感謝Michael提供了有用的鏈接。我並不是很瞭解擴展方法的用法,但現在得到了很好的理解:)。 – Rohit

回答

9

您無法在空引用上調用方法。拿出.Trim()

+1

你會推薦OOP爲selectedStory.Slug添加一個空檢查,或者將他的代碼放在try/catch中? –

+0

OP已經有一個空檢查,只是一個不需要的.trim(),這也是導致問題。如果Trim()調用被刪除,代碼將按預期工作。 – TheEvilPenguin

+0

如果'selectedstory'爲null,那麼'selectedstory.Slug'上的空檢查將拋出一個空引用異常,因爲您試圖引用空引用的屬性。 –

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

首先調用弦上Trim()方法,然後檢查空。這是失敗的部分:您試圖在空對象上調用實例方法。

你想要的是這樣的:

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

謝謝大家,爲我提供如此多的選擇,@ Muad'Dib代碼適用於我。測試和我的最終看起來不錯。再次感謝 – Usher

+0

,對不起,我不能使用你的代碼的這部分,它說,總是空bcoz我的一些變種在該對象中爲null「selectedstory!= null」 – Usher

6

試試這個:

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

,消除需要調用修剪你正在檢查的屬性。

+3

+1使用'IsNullOrWhiteSpace'來消除對'修剪'方法調用 – Leo

+4

應該指出的是,IsNullOrWhiteSpace只能在.net 4和 –

+0

@Leo謝謝澄清 - 我添加了註釋的答案。 – McGarnagle

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); 

     } 
    } 
+0

請給予原作者的答案... – Rohit

+0

@Rohit不知道如何給信貸,bcoz我使用喬懷特,凱文和dbaseman的想法和代碼的專家評論 – Usher