如何在C#中将Dictionary <string,object>转换为Dictionary <string,string>

Man*_*ngh 62 c# c#-2.0

我在C#中有以下代码

Dictionary<string, object> dObject = new Dictionary<string, object>();
Run Code Online (Sandbox Code Playgroud)

我想转换dObjectDictionary<string, string>.我怎样才能做到这一点?

Run*_*tad 97

使用ToDictionary方法:

Dictionary<string, string> dString = dObject.ToDictionary(k => k.Key, k => k.Value.ToString());
Run Code Online (Sandbox Code Playgroud)

在这里,您可以重用原始字典中的键,并使用ToString方法将值转换为字符串.

如果您的字典可以包含空值,则应在执行ToString之前添加空值检查:

Dictionary<string, string> dString = dObject.ToDictionary(k => k.Key, k => k.Value == null ? "" : k.Value.ToString());
Run Code Online (Sandbox Code Playgroud)

这有效的原因是它Dictionary<string, object>实际上是一个IEnumerable<KeyValuePair<string,object>>.上面的代码示例遍历可枚举,并使用ToDictionary方法构建新的字典.

编辑:

在.Net 2.0中,你不能使用ToDictionary方法,但你可以使用一个好的老式foreach来实现同样的目标:

Dictionary<string, string> sd = new Dictionary<string, string>(); 
foreach (KeyValuePair<string, object> keyValuePair in dict)
{
  sd.Add(keyValuePair.Key, keyValuePair.Value.ToString());
}
Run Code Online (Sandbox Code Playgroud)

EDIT2:

如果您使用的是.Net 2.0,并且字典中可以包含空值,则以下内容应该是安全的:

Dictionary<string, string> sd = new Dictionary<string, string>(); 
foreach (KeyValuePair<string, object> keyValuePair in dict)
{
  sd.Add(keyValuePair.Key, keyValuePair.Value == null ? "" : keyValuePair.Value.ToString());
}
Run Code Online (Sandbox Code Playgroud)


Jar*_*dek 8

.NET 3.5:

Dictionary<string, string> result = dObject.ToDictionary(kvp => kvp.Key, kvp => Convert.ToString(kvp.Value));
Run Code Online (Sandbox Code Playgroud)

.NET 2.0:

Dictionary<string, string> result = new Dictionary<string, string>();
foreach (KeyValuePair<string, object> kvp in dObject) result.Add(kvp.Key, Convert.ToString(kvp.Value));
Run Code Online (Sandbox Code Playgroud)