将 IDictionary<string、object> 转换为 IDictionary<string、string 的优雅方法是什么>



我有一个方法我不满意,你能告诉我如何做得更好吗?

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

相关内容

  • 没有找到相关文章

最新更新