避免使用一个字典的更好代码 - 案例敏感性问题

LCJ*_*LCJ 2 .net c# linq

我有以下方法用数据读取器中的值填充字典.数据读取器字段与传递给方法的属性之间可能存在不匹配的情况.在下面的方法中,我首先将属性转换为小写以解决此问题.这会导致两个词典.有没有更好的方法来实现这一个字典?

private Dictionary<string, object> FillDictionaryWithReaderValues(List<string> propertiesOfAllEntities, IDataReader reader)
{
   Dictionary<string, object> lowerCaseDictionary = new Dictionary<string, object>();
   Dictionary<string, object> propertyResultList = new Dictionary<string, object>();

   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;
}
Run Code Online (Sandbox Code Playgroud)

cuo*_*gle 7

你可以忽略大小写Dictionary,Dictionary有一个接受的重载构造函数IEqualityComparer,StringComparer.InvariantCultureIgnoreCase用来忽略对大小写区分大小写:

var dic = 
      new Dictionary<string, object>(StringComparer.InvariantCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

所以只有一个带有忽略大小写的字典就足够了你的代码