Что является лучшим методом слияния объекта 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);
}
}
}
}
для начала, вы можете реализовать ['IEquatable'] (http://msdn.microsoft.com/en-us/library/ms131187 (v = vs.100) .aspx) в' ZipCodeTerritory' для рефакторинга или из этого кода сравнения ... – kaveman
Если я правильно понял, мне все равно придется перебирать обе коллекции, хотя я переопределяю метод '.Equals()'. Учтите, что если .Net/Linq/любая другая библиотека или пространство имен имеет функцию, которая может позаботиться об этом быстрее. – NealR
Вы правы, это был всего лишь комментарий/предложение, чтобы помочь вам очистить этот раздел кода (SLOC/sep. Проблем) – kaveman