我有一个我不满意的方法,请你告诉我如何做得更好。
public Foo WithBar(IDictionary<string, object> parameters) {
var strStrDict = new Dictionary<string, string>(parameters.Count);
foreach(var pair in parameters)
{
strStrDict.Add(pair.Key, pair.Value != null ? pair.Value.ToString() : (string)null);
}
// Call overload which takes IDictionary<string, string>
return this.WithBar(strStrDict);
}
这段代码有效,但我确信有一种很好的linq'y方法可以解决这个问题。
答案 0 :(得分:7)
parameters.ToDictionary(k=>k.Key, v=>v.Value!=null?v.Value.ToString():(string)null);
答案 1 :(得分:4)
parameters.ToDictionary(k => k.Key, v => Convert.ToString(v.Value))
Convert.ToString()
会在您期望的空值上返回null
。
<强>更新强>
Convert.ToString(object)
会返回String.Empty
,但Convert.ToString(string)
会返回null
。不幸的是,不你需要什么。我认为奇怪的定义: - /
答案 2 :(得分:-1)
parameters.ToDictionary(p => p.Key, p => p.Value.ToString()) // out of my head