gpt4 book ai didi

c# - 编写修改 C# 集合的方法时有什么好的做法

转载 作者:行者123 更新时间:2023-11-30 19:03:22 25 4
gpt4 key购买 nike

我正在重构一些代码,我编写了一个修改字典 并返回它的方法。这比使用 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 参数,而是从 FindMatches 返回一个 KeyValuePair 列表。我最终得到一个 List<KeyValuePair<int, string>>我通过以下方式将其转换为字典:

records
.GroupBy(rec => rec.Key)
.ToDictionary(grp => grp.Key, grp => grp.First().Value);

最佳答案

为什么你的方法要修改现有的字典?它似乎没有使用现有的键/值,所以让 this 方法只返回一个新的 Dictionary<string, int> :

private static Dictionary<int, string>
FindMatches(string queryFormat,
string region,
string type,
string label)
{
var records = new Dictionary<int, string>();
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 each assetID in the database will be distinct, you
// don't need the "if" here, because you know the dictionary
// is empty to start with
if (!records.ContainsKey(assetID))
{
records[assetID] = dr.GetString(1);
}
}
}
}
return records;
}

然后您可以编写一个单独的方法以特定方式合并两个字典 - 或者返回一个新字典,它是合并两个现有字典的结果。分离这两个问题。

关于c# - 编写修改 C# 集合的方法时有什么好的做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5034646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com