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: