我有一个方法我不满意,你能告诉我如何做得更好吗?
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方式来做到这一点,我错过了
parameters.ToDictionary(k=>k.Key, v=>v.Value!=null?v.Value.ToString():(string)null);
parameters.ToDictionary(k => k.Key, v => Convert.ToString(v.Value))
Convert.ToString()
返回null
的空值,这是您所期望的。
更新:
Convert.ToString(object)
返回String.Empty
,而Convert.ToString(string)
返回null
。不幸的是,不是您需要的。在我看来奇怪的定义:-/
parameters.ToDictionary(p => p.Key, p => p.Value.ToString()) // out of my head