2012-05-10 3 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 имеет нулевое значение, поэтому я использовал если условие, чтобы проверить, но это бросает прямо в, если условия.

Может кто-нибудь, пожалуйста, сообщите, что это правильный способ проверить.

+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

Вы не можете вызвать методы для нулевой ссылки. Выньте .Trim().

+1

Вы бы рекомендовали ООП добавили нулевую проверку в 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

, извините, я не мог использовать эту часть вашего кода, она говорит, что всегда null bcoz некоторые из моих var являются нулевыми в этом объекте «selectedstory! = 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

@Rohit не уверен, как дать кредит, bcoz Я использовал комментарии экспертов от Джо Уайта, идеи и код Кевина и Дбасемана – Usher

Смежные вопросы