2012-05-10 16 views
2

私はvarでnullをチェックしようとしていましたが、オブジェクト参照がオブジェクトのインスタンスに設定されていません。なぜ条件が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は私がチェックするかの条件を使用し、それがもし状態で右そこに投げている理由であるNULL値がある知っています。

確認する方法は何ですか?

+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

あなたの役に立つリンクのためのマイケルありがとうございます。私は、拡張メソッドの使い方をあまり気にしていませんでしたが、今は理解が深まっています:) – Rohit

答えて

9

null参照でメソッドを呼び出すことはできません。 .Trim()を取り出してください。

+1

OOPがselectedStory.Slugにヌルチェックを追加するか、自分のコードをtry/catchで囲むことをお勧めしますか? –

+0

OPにはすでにヌルチェックがありますが、不要な.trim()も問題を引き起こしています。 Trim()呼び出しが削除された場合、コードは意図したとおりに動作します。 – TheEvilPenguin

+0

'selectedstory'がヌルの場合、ヌル参照のプロパティを参照しようとしているため、' selectedstory.Slug'のヌルチェックでヌル参照例外がスローされます。 –

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

は、最初の文字列にTrim()メソッドを呼び出した後、ヌルをチェックします。これは失敗している部分です:ヌルオブジェクトに対してインスタンスメソッドを呼び出そうとしています。あなたが欲しいもの

は、このようなものです:

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

非常に多くのオプションで私を啓発するために皆さん、ありがとうございます。@ Muad'Dibコードはme.testedのために動作し、私の最後によく見えます。ありがとうございました – Usher

+0

、申し訳ありませんが、私はあなたのコードのこの部分を使用することができませんでしたが、常に私のvarのいくつかは、そのオブジェクト "selectedstory!= null" null nullです – Usher

6

は、このいずれかを試してください:あなたがチェックしているプロパティにトリムを呼び出す必要がなくなり

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

+3

+1は、 'IsNullOrWhiteSpace'を使用して' Trim'メソッドの呼び出し – 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

@ロヒットは、クレジットを与える方法がわからない、私はジョーホワイト、ケビンとdbasemanアイデアとコードから専門家のコメントを使用してbcoz – Usher

関連する問題