Ajouter à la Collection, si Non Null
J'ai un très grand objet avec de nombreux nullable des variables de type. J'ai aussi un dictionnaire qui je veux remplir avec cet objet est non-null variables.
Le code ressemblera à ceci
if (myObject.whatever != null)
{
myDictionary.Add("...",myObject.whatever);
}
if (myObject.somethingElse != null)
{
myDictionary.Add("...",myObject.somethingElse);
...
MODIFIER (Désolé foiré le code)
Quand nous le répéter pour la énième fois que nous avons un gâchis de code très long. Est-il plus court que j'ai pu écrire ce gâchis? Je sais que sur l'Opérateur Conditionnel (aka ?) mais c'est juste pour les affectations. Est-il quelque chose comme ça pour l'ajout à une collection?
U signifie que vous ne voulez ad éléments qui ne sont pas null
"Je connais l'Opérateur Conditionnel (aka ?) mais c'est juste pour les affectations." D'où vous est venue cette idée?
Oui. Chacun doit avoir une touche particulière dans le dictionnaire, je ne peux donc pas utiliser la réflexion
"avec cet objet est non-null variables." Mais vous êtes en train d'ajouter les valeurs null.
S'il vous plaît corrigez-moi alors, c'est le jist de ma question
"Je connais l'Opérateur Conditionnel (aka ?) mais c'est juste pour les affectations." D'où vous est venue cette idée?
Oui. Chacun doit avoir une touche particulière dans le dictionnaire, je ne peux donc pas utiliser la réflexion
"avec cet objet est non-null variables." Mais vous êtes en train d'ajouter les valeurs null.
S'il vous plaît corrigez-moi alors, c'est le jist de ma question
OriginalL'auteur Aabela | 2012-07-26
Vous devez vous connecter pour publier un commentaire.
Comment sur une méthode d'extension pour votre dictionnaire?
Vous pourriez alors faire ceci:
OriginalL'auteur
Je vous recommande la rédaction d'une méthode d'extension:
À l'aide de
(object)value != null
assure que cela fonctionne comme vous le souhaitez avec des types nullables, (par exemple,int?
) types de valeur, (par exemple,int
) et les types de référence (par exemple,SomeClass
). Si vous le comparez àdefault(TValue)
, puis unint
de0
ne sera pas ajouté, même si elle n'est pas nulle. Si vous incluez unTValue : class
exigence, vous ne pouvez pas utiliserNullable<T>
que le type, on dirait qu'est votre usage le plus fréquent.OriginalL'auteur
Vous pouvez faire une méthode qui cache votre
if
:Vous pouvez gagner des points pour le style" en faisant de la méthode une extension (vous devez l'ajouter à une classe statique à l'époque):
Si vous savez que vous insérez uniquement faire référence à des objets de type, remplacer
default(T)
avecnull
et ajouter unclass T
contrainte pour le générique.AddIfNotNull<K, int>
à ne pas ajouter des valeurs qui se trouvent être de zéro, mais non nulles? En passant, il manque une parenthèse fermante aprèsdefault(T)
.Oui, c'est une limitation. Une mise en œuvre qui traite à la fois avec les classes et les nullable valeurs (
int?
,double?
, etc.) est beaucoup plus complexe.Je pense que
if (value != null)
serait suffisant.Je me souviens vaguement d'avoir des problèmes avec ça, peut-être .NET 3.5. J'ai besoin de construire un peu complexe null vérificateur qui a travaillé avec les deux nullable et des classes.
Null nullable boîte à
null
, de sorte que même siif (value != null)
a des problèmes (que j'avais besoin de voir),if ((object)value != null)
fonctionne encore.OriginalL'auteur
Si ce n'est pas un problème de performance: Pourquoi ne pas ajouter tout pour le tout et retirer ce que vous n'avez pas besoin?
OriginalL'auteur
etc
OriginalL'auteur