2017-09-18 4 views
1
Current.Images?.Count > 0 ? $"{Current.Images.Count} Image(s)" : "Enter Image"; 

C'est assez bon de savoir si quelque chose peut être nul que cela me fait me demander si quelque chose me manque.Comment cela peut-il être une référence nulle? Resharper pense que Current.Images.Count peut être une référence nulle.

Ma logique: La condition que le conditionnel peut être vrai est si Images n'est pas null et a effectivement au moins une valeur. Le problème est pas avec courant. Il ne peut pas être nul à ce stade et Resharper le sait.

+2

Est-ce que 'Current' pourrait être nul? – Shyju

+0

Je pense que Current est une classe et une propriété de liste statique Images. Basé sur ceci, le courant ne pourrait pas être nul ?! Mais de l'autre côté, il n'y a pas d'autre option. ;) –

+0

@SeanStayn Pourquoi devrait-il être statique? Sinon, "Current" pourrait bien être nul. – DavidG

Répondre

0

Si le courant est un varable, vous devez vérifier qu'il est non nul:

((Current ?? throw new NullReferenceException(nameof(Current)).Images?.Count > 0) 
    ? $"{Current.Images.Count} Image(s)" 
    : "Enter Image"; 

(Cet exemple a des accolades autour de la première ligne, pour une meilleure lisibilité surtout parce que dans certains cas, null expressions coalescents sont évaluées à null. complètement, et vous épargnez au lecteur de votre code la difficulté de comprendre si c'est le cas dans ce cas.La décision d'accoler de cette façon dépend des préférences de style de code de vos équipes)

De plus, vous étaler votre code plusieurs lignes vous aide à déterminer quelle partie a l'erreur.

Si Current est une classe statique, Resharper semble incorrect. Vous pouvez demander à resharper d'ignorer cette instance (dans votre code) ou d'ignorer chaque instance (dans les paramètres de resharper)

+0

Ce n'est pas vraiment une erreur, je demande pourquoi Resharper pense que c'est dangereux. Le courant ne peut pas être nul et Resharper le sait. Les images ** peuvent ** être nulles mais comment peut-il être nul dans la seconde référence? –

+0

Je pense que RS est incapable d'évaluer correctement l'expression. En outre, pourquoi les images peuvent-elles être nulles?(J'évite toujours les collections qui peuvent être nulles Souvent, null est incorrectement utilisé à la place d'une collection vide – realbart

0

Resharper marque votre code en tant qu'exception de référence nulle possible, car vous ne cochez pas Current.Images pour null, dans votre chaîne littérale ..

votre code:

Current.Images?.Count > 0 ? $"{Current.Images.Count} Image(s)" : "Enter Image"; 

Code de sécurité:

Current.Images?.Count > 0 ? $"{Current.Images?.Count} Image(s)" : "Enter Image"; 
           missing ____^ 
+0

C'est ainsi que je l'ai géré mais je ne vois aucune situation dans laquelle Current.Images est nulle à ce moment-là. test pour évaluer non-nul il doit effectivement y avoir une collection avec quelque chose dedans. –

1

Il est a bug dans R # 2017.2 et il va être corrigé dans la prochaine mise à jour de correctif R # 2017.2.1.