Comment fonctionne la Liste des<T>.Trouver du travail lorsque T est un struct?
J'ai un List<KeyValuePair<string, othertype>>
. J'ai besoin de faire quelque chose le long des lignes de
list.Find(x=>x.Key=="foobar")
Toutefois, si cela n'existe pas dans la liste, quel sera le comportement de l'être? Généralement, il serait de retour null, mais les structures ne peuvent pas être null.
Essayez avec
La valeur par défaut pour le type T, plus précisément
Si vous souhaitez Trouver de retourner la valeur null lorsque aucune correspondance n'est trouvée, pensez à utiliser un Tuple au lieu de KeyValuePair.
Ne pouvez pas utiliser les Tuples parce que nous visons .Net 2.0 compatibilité
int
et voir ce qui se passe.La valeur par défaut pour le type T, plus précisément
default(T)
.Si vous souhaitez Trouver de retourner la valeur null lorsque aucune correspondance n'est trouvée, pensez à utiliser un Tuple au lieu de KeyValuePair.
Ne pouvez pas utiliser les Tuples parce que nous visons .Net 2.0 compatibilité
OriginalL'auteur Earlz | 2012-10-01
Vous devez vous connecter pour publier un commentaire.
Il sera de retour le
default(T)
qui sera le même quenew KeyValuePair<string, othertype>>()
, qui est, par défaut initialisé struct.Fondamentalement, la valeur par défaut pour les types de référence est toujours
null
, et pour les types de valeur (y comprisstruct
) c'est la valeur par défaut (0
pour les objets numériques,false
pourbool
, unstruct
avec tous les champs par défaut pour les structures, etc.)Ainsi, pour un
default(KeyValuePair<string, othertype>>)
que vous obtenez en retour un KVP, où laKey
étaitnull
(par défaut pourstring
) et quel que soit ledefault(othertype)
serait (comme dans les exemples ci-dessus)...De la MSDN:
À l'aide de cela, si vous vouliez vérifier et voir si vous avez de nouveau la
default
, je vous recommande de vérifieryourResult.Key != null
pour voir si vous avez obtenu un résultat, ou vous pouvez utiliser un autreFind
méthode telle queFindIndex
Olivier suggère.Nullable<T>
, parce que l'initialisation par défaut des résultats dansHasValue
être faux, comme tout champ Booléen de toute structure), il provoque la structure pour être interprété dans de nombreux contextes comme une valeur null.OriginalL'auteur James Michael Hare
Mon conseil est d'utiliser
FindIndex
pour les non types nullablesLa valeur par défaut
default(T)
est retournée siFind()
n'est pas réussie. Pour les non types nullables, ce résultat ne peut pas être distinguée de la régulièrement les entrées ayant la valeur par défaut. Cela est également vrai pour les types nullables lorsque la liste peut contenir régulièrenull
entrées.List<string>
peut contenir des valeurs null.+1: Très joli. Je ne veux pas comparer avec une valeur par défaut; comme vous l'avez dit, dans la plupart des cas, il n'y a aucun moyen de déterminer la différence.
OriginalL'auteur Olivier Jacot-Descombes
Structure est un type valeur. ainsi, Dans le cas de la structure à Trouver sera de retour la valeur par défaut de la structure.
EXEMPLE:
Permet de dire que nous avons la structure, comme ci-dessous,
Ci-dessus résultat de la recherche de la valeur comme new Test(). vous pouvez comparer la valeur par code ci-dessous.
OU
J'ai changé '==' égal à Égal.
Je le recommande à l'encontre de faire un
== new Test()
, c'est un peu lourd depuis==
surstruct
est réfléchissant. J'aimerais plutôt vous recommandons de vérifier lesKey
champ pournull
dans leOP
exemple.Oui, nous pouvons vérifier champ de Clé null. Mais je pense que si la clé est de type int alors la valeur par défaut pour le type int est de 0. donc, si nous ne voulons pas aller avec le type de données puis de vérifier, avec un nouveau Test() sera utile.
Même dans ces cas, j'aimerais vérifier par défaut(Test) plutôt que == new Test(), l'intention est de plus en plus clair.
OriginalL'auteur Jignesh Thakker
Par la lecture de ces deux documents articles, il me semble que si vous devriez être renvoyé la valeur par défaut pour votre structure:
Valeurs Par Défaut:
http://msdn.microsoft.com/en-us/library/aa664475(v=vs. 71).aspx
Liste(T).Méthode De Recherche:
http://msdn.microsoft.com/en-us/library/x0b5b5bc.aspx
OriginalL'auteur