我重构一些代码,我写了一个修改词典和返回它的方法的方法时,什么是好的做法。这是比使用出参数更好的做法吗?我真的不希望在这种情况下创建一个扩展方法,因为它会的方法添加到词典类,这是矫枉过正这是什么用途。请不要指出我不应该使用动态sql,这是目前必须推迟重构的另一个阶段。编写修改了C#集合
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参数只有意义。更多的上下文是这个方法被多次调用不同的查询字符串,并且字典可能已经包含匹配。
EDIT2:只是为了跟进我删除了记录参数,而不是从FindMatches返回KeyValuePair的列表。我结束了一个List<KeyValuePair<int, string>>
我通过转换为词典:
records
.GroupBy(rec => rec.Key)
.ToDictionary(grp => grp.Key, grp => grp.First().Value);
不,对象不是通过引用传递的。引用是按值传递的。对象本身根本不通过。有很大的不同。见http://pobox.com/~skeet/csharp/parameters.html – 2011-02-17 21:11:04
是的,乔恩是对的。我错过了。将重述。 – Kon 2011-02-17 21:13:48
Kon我想你的观点是,如果我将字典作为参数传递,我可以直接修改字典,而不必将其作为方法调用的结果返回。我明白,但我想明确说明字典是由该方法修改的。 – 2011-02-17 21:45:19