Comment puis-je écrire un raccourci du scénario suivant?
get
{
if (_rows == null)
{
_rows = new List<Row>();
}
return _rows;
}
Comment puis-je écrire un raccourci du scénario suivant?
get
{
if (_rows == null)
{
_rows = new List<Row>();
}
return _rows;
}
Utilisation de l'opérateur de coalescence nulle (??):
get
{
_rows = _rows ?? new List<Row>();
return _rows;
}
OU (moins lisible):
get { return _rows ?? (_rows = new List<Row>()); }
Le ?? opérateur est appelé l'opérateur null-coalescing. Il retourne l'opérande de gauche si l'opérande n'est pas nul; sinon, il retourne l'opérande de droite.
Il s’agit du modèle d’initialisation paresseux. La méthode la plus simple consiste à utiliser la classe Lazy <T> .
class Foo
{
Lazy<List<Row>> _rows;
public Foo()
{
_rows = new Lazy(() => new List<Row>());
}
public List<Row> Rows
{
get { return _rows.Value; }
}
}
Cela a l’avantage supplémentaire de ne pas "polluer" le getter avec la logique d’initialisation.
Je suggère l'opérateur ternaire
get {
return _rows == null ? _rows = new List<Row>() : _rows;
}
Ou puisque les valeurs List<Row>
vides n'entraînent pas beaucoup de charge supplémentaire, pourquoi ne pas supprimer le champ _row
explicite et mettre en œuvre une propriété en lecture seule (syntaxe C # 6.0 ):
public IList<Row> Rows {get;} = new List<Row>();
Voici une meilleure idée: Prévenir _rows
d'être null
.
Faites votre constructeur initialise la variable:
public MyClass()
{
this._rows = new List<Row>();
}
et puis, votre propriété est à seulement
get
{
return this._rows;
}
Assurez-vous que si vous avez besoin de "vider" la variable, vous pouvez toujours appeler sa Clear
méthode ou attribuer une nouvelle liste vide au lieu d'attribuer null
. Peut-être encoder cette opération dans une méthode si vous avez vraiment besoin de la rendre claire et cohérente dans l'ensemble de la classe.
C'est beaucoup plus logique. Si votre variable ne doit jamais être null
, il ne devrait jamais être null
. Il a également soigneusement évite à la fois la condition et la question d'avoir un getter modifier l'état.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.