Un meilleur code pour éviter un dictionnaire – Problème de sensibilité à la casse

J’ai méthode suivante pour remplir un dictionnaire avec les valeurs d’un lecteur de données. Des différences de casse peuvent exister entre les champs du lecteur de données et les propriétés transmises à la méthode. Dans la méthode suivante, je convertis d’abord les propriétés en minuscules pour résoudre ce problème. Cela provoque deux dictionnaires. Existe-t-il un meilleur moyen d’y parvenir avec un seul dictionnaire?

private Dictionary FillDictionaryWithReaderValues(List propertiesOfAllEntities, IDataReader reader) { Dictionary lowerCaseDictionary = new Dictionary(); Dictionary propertyResultList = new Dictionary(); foreach (var item in propertiesOfAllEntities) { lowerCaseDictionary.Add(item.ToLower(), null); } for (int i = 0; i < reader.FieldCount; i++) { lowerCaseDictionary[reader.GetName(i).ToLower()] = reader[i]; } foreach (var item in propertiesOfAllEntities) { propertyResultList.Add(item, lowerCaseDictionary[item.ToLower()]); } return propertyResultList; } 

Vous pouvez ignorer la casse dans Dictionary . Dictionary dispose d’un constructeur de surcharge qui accepte IEqualityComparer . Utilisez SsortingngComparer.InvariantCultureIgnoreCase pour ignorer la casse, sensible à la casse:

 var dic = new Dictionary(SsortingngComparer.InvariantCultureIgnoreCase); 

Donc, un seul dictionnaire avec casse est suffisant pour votre code

Merci à @CuongLe. Merci de voter @Cuong Le answer si vous aimez ce qui suit.

Pour le bénéfice des autres, je vais écrire la réponse ici:

  private Dictionary FillDictionaryWithReaderValues(List propertiesOfAllEntities, IDataReader reader) { Dictionary propertyResultList = new Dictionary(SsortingngComparer.InvariantCultureIgnoreCase); for (int i = 0; i < reader.FieldCount; i++) { string readerFieldName = reader.GetName(i); //Whether propertiesOfAllEntities.Contains the property if (propertiesOfAllEntities.FindIndex(x => x.Equals(readerFieldName, SsortingngComparison.OrdinalIgnoreCase)) != -1) { propertyResultList.Add(readerFieldName, reader[i]); } } return propertyResultList; } 

RÉFÉRENCE:

  1. Recherche dans la liste sans distinction de casse