将IDictionary <string,object =“”>转换为IDictionary <string,string =“”> </string,> </string,>的优雅方法是什么?

时间:2011-04-20 21:13:15

标签: c# linq

我有一个我不满意的方法,请你告诉我如何做得更好。

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方法可以解决这个问题。

3 个答案:

答案 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