Я рефакторинг некоторого кода, и я написал метод, который изменяет Словарь и возвращает его. Это лучше, чем использовать параметр out ? Я действительно не хочу создавать метод расширения в этом случае, потому что он добавил бы метод в класс Dictionary , который является излишним для того, для чего он используется. Пожалуйста, не указывайте, что я не должен использовать динамический sql, это еще один этап рефакторинга, который в настоящее время должен быть отложен.
private static Dictionary<int, string>
FindMatches(Dictionary<int, string> records,
string queryFormat,
string region,
string type,
string label)
{
var query = string.Format(queryFormat, SqlSvrName, SqlDbName, SqlSchemaName,
region, type, label);
using (var dr = DataRepository.Provider.ExecuteReader(CommandType.Text, query))
{
if (dr != null && !dr.IsClosed)
{
while (dr.Read())
{
var assetID = (int)dr.GetDouble(0);
if (!records.ContainsKey(assetID))
records[assetID] = dr.GetString(1);
}
}
}
return records;
}
Редактировать: Я немного поспешил с использованием термина out выше. Я пытаюсь сделать явным в моем коде, что словарь изменяется методом. Параметр out здесь имеет смысл только в том случае, если метод создает новый словарь и возвращает его через этот параметр. Немного больше контекста для этого является то, что метод вызывается несколько раз с различными строками запроса, и словарь может уже содержать совпадения.
Edit2: просто чтобы продолжить, я удалил параметр records и вместо этого возвратил список KeyValuePair из FindMatches . Я получаю List<KeyValuePair<int, string>>
, который преобразую в словарь с помощью:
records
.GroupBy(rec => rec.Key)
.ToDictionary(grp => grp.Key, grp => grp.First().Value);