将List
对象合并为具有动态密钥类型的Dictionary
的最佳方法是什么?
出于错误报告的目的,我使用以下Dictionary
public static Dictionary<object, string> _errors = new Dictionary<object, string>();
但是,在程序的某个部分,我想将List
个对象合并到Dictionary
中。但问题是,我只想包含List
中尚未存在的Dictionary
中的对象。这可能是以一种程序性较小的方式进行,而不是像我在下面所做的那样循环遍历两个对象吗?
//'updates' is a standard List<ZipCodeTerritory> object
foreach (ZipCodeTerritory zip in updates)
{
foreach (KeyValuePair<object, string> error in errorList)
{
if (error.Key is ZipCodeTerritory)
{
ZipCodeTerritory existingKey = (ZipCodeTerritory) error.Key;
if (
zip.Id != existingKey.Id &&
zip.ChannelCode != existingKey.ChannelCode &&
zip.DrmTerrDesc != existingKey.DrmTerrDesc &&
zip.IndDistrnId != existingKey.IndDistrnId &&
zip.StateCode != existingKey.StateCode &&
zip.ZipCode != existingKey.ZipCode &&
zip.EndDate.Date != existingKey.EndDate.Date &&
zip.EffectiveDate.Date != existingKey.EffectiveDate.Date &&
zip.ErrorCodes != existingKey.ErrorCodes &&
zip.Status != existingKey.Status
)
{
errorList.Add(zip, string.Empty);
}
}
}
}
答案 0 :(得分:0)
Dictionary<dynamic, string> _errors = new Dictionary<dynamic, string>();
if(from c in _errors where(key.zip.Id != existingKey.Id &&
key.zip.ChannelCode != existingKey.ChannelCode &&
key.zip.DrmTerrDesc != existingKey.DrmTerrDesc &&
key.zip.IndDistrnId != existingKey.IndDistrnId &&
key.zip.StateCode != existingKey.StateCode &&
key.zip.ZipCode != existingKey.ZipCode &&
key.zip.EndDate.Date != existingKey.EndDate.Date &&
key.zip.EffectiveDate.Date != existingKey.EffectiveDate.Date &&
key.zip.ErrorCodes != existingKey.ErrorCodes &&
key.zip.Status != existingKey.Status) select c.key).FirstOrDefault()==null)
{
errorList.Add(zip, string.Empty);
}
答案 1 :(得分:0)
在您的代码示例中,未使用字典Value
,它始终为String.Empty
。也许HashSet会更合适:
HashSet类提供高性能的集合操作。集合是一个不包含重复元素的集合,其元素没有特定的顺序。
因此:
var errorList = new HashSet<ZipCodeTerritory>(updates);
修改强>
您还需要确保指定了相等比较器,或者Equals(object obj)
正确实现了Equals(object obj)