Csharp/C#教程:避免使用一个字典的更好代码 – 案例敏感性问题分享


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

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

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; } 

你可以在Dictionary忽略大小写, Dictionary有一个接受IEqualityComparer的重载构造函数 ,使用StringComparer.InvariantCultureIgnoreCase忽略大小写敏感的key:

 var dic = new Dictionary(StringComparer.InvariantCultureIgnoreCase); 

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

感谢@CuongLe。 如果你喜欢以下内容,请upvote @Cuong Le回答。

为了别人的利益,我会在这里写下答案:

  private Dictionary FillDictionaryWithReaderValues(List propertiesOfAllEntities, IDataReader reader) { Dictionary propertyResultList = new Dictionary(StringComparer.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, StringComparison.OrdinalIgnoreCase)) != -1) { propertyResultList.Add(readerFieldName, reader[i]); } } return propertyResultList; } 

参考:

上述就是C#学习教程:避免使用一个字典的更好代码 – 案例敏感性问题分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

  1. 不区分大小写的搜索列表

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/942485.html

(0)
上一篇 2021年11月13日
下一篇 2021年11月13日

精彩推荐