2010-11-05 9 views
2

J'ai une propriété définie dans une interface comme:Pourquoi est-ce que je reçois une exception avec le code suivant?

Boolean IsBusy { get; } 

Il est mis en œuvre dans la classe:

private Boolean _isBusy = false; 
public Boolean IsBusy 
    { 
     get 
     { 
      return this._isBusy; 
     } 

     private set 
     { 
      if (this._isBusy != value) 
      { 
       this._isBusy = value; 
       this.OnPropertyChanged("IsBusy"); 
      } 
     } 
    } 

Puis, quand je lance l'application, je reçois toujours suivant type d'erreur lors de l'enregistrement valeur IsBusy dans le constructeur:

'IsBusy' a lancé une exception de type 'System.NullReferenceException' bool {} System.NullReferenceException

Je ne peux pas comprendre. Si je change tout Boolean en bool, obtenez la même erreur.

Comment puis-je résoudre ce problème?

+1

Pouvez-vous priver le fragment de votre constructeur, où vous appelez IsBusy? – st78

Répondre

1

bool est juste un raccourci de syntaxe pour Boolean

1

Les deux bool et Boolean évaluer la même chose dans la compilation.

10

Vous le corrigez en vérifiant si OnPropertyChanged est null avant de l'appeler, en supposant que OnPropertyChanged est un événement ou une variable de délégué (vous ne l'avez pas effacé). Cela n'a rien à voir avec bool ou Boolean, qui sont équivalents (en supposant que Boolean est résolu à System.Boolean).

Je ne vois pas d'autre raison pour laquelle il lancerait NullReferenceException - bien que cela vous aiderait vraiment à savoir si vous appeliez le getter ou le setter au moment où il lançait l'exception. Un exemple court mais complet serait encore plus utile.

1

aucun. Boolean est ce que l'interface de ligne de commande .net utilise pour représenter une valeur true/false. bool est ce que C# utilise.

1
  1. bool est un alias C# pour la structure System.Boolean. Ce sont les mêmes. Votre problème est probablement que this.OnPropertyChanged est non attribué. Ceci est complètement indépendant de bool vs Boolean.
1

C# contient une aliase pour tous les types natifs. Chaîne de chaîne, Int32 pour int, etc. il n'y a pas de différence avec laquelle vous utilisez:

String vs string in C#

Boolean ne peut pas être NULL, vous obtenez probablement une erreur à cause de quelque chose dans OnPropertyChanged.

0

Le mot-clé bool est juste un alias de type pour le mot-clé Boolean.

La même chose que int est un alias pour Int32.