2009-03-06 6 views
2
private List<string> _Baseline = new List<string>(); 

public List<string> Baseline 
{ 
    get { return _Baseline; } 
    set { _Baseline = value; } 
} 

Comment puis-je définir cette propriété? Il ne me laisse pas ajouter en utilisant la méthode add; il renvoie une erreur "object reference null".Comment ajouter de la valeur dans une propriété publique de List <string> type dans C#?

+0

Vous devez montrer plus de code - de préférence un programme court mais complet démontrant le problème. –

+0

D'accord, bien que ce soit presque certainement ce que diegojancic a répondu – eglasius

+0

Pouvez-vous s'il vous plaît montrer comment cela s'appelle? –

Répondre

1

Initialisez-vous la classe (en utilisant new) qui contient cette propriété avant utilisation?

Il y a deux cas possibles (en supposant que votre code est en MyClass classe):

//External code: 
MyClass x = new MyClass(); 
x.Baseline = null; // Somewhere it'll be set to null. 
x.Baseline.Add("Something"); // NullReferenceException 

Ou:

//External code: 
MyClass x = null; // Somewhere the class itself is set to null. 
x.Baseline.Add("Something"); // NullReferenceException 
+0

il ne serait autrement pas en mesure de l'appeler (temps de compilation ...), et l'échantillon montre déjà qu'il est initialisé dans la variable de support – eglasius

+0

Cela compile certainement: MyClass x = null; x.Baseline.Add ("exception de référence nulle"); –

6

Il devrait fonctionner si vous avez fait ce que vous avez écrit ici. Je suppose que vous utilisez des génériques, et je ne peux pas les voir dans votre message.

Si vous avez une expression complexe, divisez-la. Par exemple, changer ObjectA.Prop.Other.Xyz.Add (..) à:

SomeClass a = ObjectA.Prop; 
SomeClass2 b = a.Other; 
SomeClass3 c = b.Xyz; 
c.Add(...) 

cette façon, vous trouverez rapidement où la référence est nulle.

-1

Vous pourriez avoir besoin d'utiliser IList:

private IList<string> _Baseline = new List<string>(); 

public IList<string> Baseline 
{ 
    get { return _Baseline; } 
    set { _Baseline = value; } 
} 
+0

Non, cela ne devrait pas être le problème. –

+0

Il n'y a pas de différence, c'est la même chose. Les deux façons fonctionnent. –

+0

qu'est-ce que c'est avec l'utilisation de * mettre l'accent sur les choses ces jours-ci, je ne l'aime pas un peu. – Nick

1

Il y a 3 possibilités:

  1. votre list<string> est null
  2. l'objet contenant votre list<string> est null
  3. l'élément que vous êtes l'insertion est nulle

1 est adressé lorsque vous lui attribuez une nouvelle liste

2 et 3 nous ne pouvons pas vérifier à partir du code que vous publiez ici.

Si vous n'avez pas l'intention d'autoriser l'assignation d'un nouvel objet de liste en dehors de votre classe, alors vous n'avez pas, comme indiqué précédemment, besoin d'un setter. Vous pouvez le supprimer ou le déclarer privé ou protégé, comme celui-ci ....

public List<string> Baseline 
{ 
    get { return _Baseline; } 
    protected set { _Baseline = value; } 
} 
+0

3 ne provoquerait pas d'exception. – configurator

+0

@Chris: le configurateur a raison. Vous pouvez * insérer * des valeurs nulles dans une liste. –

+0

yeh, je sais, mais son exception pourrait être quelque chose causé en essayant d'appeler l'objet nul qu'il a inséré dans la collection, d'où la possibilité. juste exposant ses options. –

0

j'ai obtenu la même erreur depuis la déclaration ne convenait pas:

private List<string> _Baseline; - incorrect 
private List<string> _Baseline = new List<string>(); - correct 
Questions connexes