Nullable ToSsortingng ()

Je vois partout des constructions comme:

int? myVar = null; ssortingng test = myVar.HasValue ? myVar.Value.ToSsortingng() : ssortingng.Empty; 

Pourquoi ne pas utiliser simplement:

 ssortingng test = myVar.ToSsortingng(); 

N’est-ce pas exactement la même chose? Au moins Reflector dit que:

 public override ssortingng ToSsortingng() { if (!this.HasValue) { return ""; } return this.value.ToSsortingng(); } 

Alors, est-ce que c’est correct (la version plus courte) ou est-ce que je manque quelque chose?

Vous avez tout à fait raison. Toujours dans cette question , la première solution est suggérée alors que personne ne remarque réellement que ToSsortingng() donne déjà la bonne réponse.

Peut-être que l’argument de la solution la plus prolixe est la lisibilité: lorsque vous appelez ToSsortingng() sur quelque chose qui est supposé être null , vous attendez généralement une NullReferenceException , bien qu’elle ne soit pas lancée ici.

Je pense que beaucoup de gens ont de telles vérifications parce que ce n’est pas un comportement naturel d’un object qui peut contenir une valeur nulle.

Non, vous avez raison, la version la plus courte est la même que celle que d’autres ont utilisée à cet égard. L’autre construction que j’ai tendance à utiliser beaucoup au lieu du ternaire avec des nullables est l’opérateur de coalescence nulle. ce qui vous protège également des nulls. Pour ToSsortingng (), ce n’est pas nécessaire (comme vous l’avez souligné) mais pour les valeurs int par défaut (par exemple), cela fonctionne bien, par exemple:

 int page = currentPage ?? 1; 

qui vous permet de faire toutes les opérations entières sur la page sans vérifier explicitement la nullité et en appelant la valeur dans currentPage (où currentPage est un int? peut-être passé en paramètre)

Je sais, longtemps après, c’était pertinent, mais … je pense que c’est parce que pour les types nullables comme int? la méthode .ToSsortingng () ne vous permet pas d’utiliser des chaînes de format. Voir Comment puis-je formater un DateTime nullable avec ToSsortingng ()? . Peut-être que dans le code d’origine, il y avait une chaîne de format dans .ToSsortingng (), ou peut-être que le codeur avait oublié que .ToSsortingng () sans la chaîne de format était toujours disponible sur les types NULL.

Peut-être est-ce juste pour suivre le modèle? ou ils ne connaissent pas le backend. vous avez raison le code est exactement le même. vous pouvez même faire:

 int? i = null; i.ToSsortingng(); //No NullReferenceException