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

Posted

技术标签:

【中文标题】如何在 C# 中将 Dictionary<string, object> 转换为 Dictionary<string, string>【英文标题】:How to convert Dictionary<string, object> to Dictionary<string, string> in c# 【发布时间】:2011-02-09 08:18:24 【问题描述】:

我在 C# 中有以下代码

Dictionary<string, object> dObject = new Dictionary<string, object>();

我想将dObject 转换为Dictionary&lt;string, string&gt;。我该怎么做?

【问题讨论】:

【参考方案1】:

使用 ToDictionary 方法:

Dictionary<string, string> dString = dObject.ToDictionary(k => k.Key, k => k.Value.ToString());

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

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

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

之所以有效,是因为Dictionary&lt;string, object&gt; 实际上是IEnumerable&lt;KeyValuePair&lt;string,object&gt;&gt;。上面的代码示例遍历枚举并使用 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());

编辑2:

如果您使用的是 .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());

【讨论】:

我正在使用 .NET 2.0,可以在其中使用。我没有收到“ToDictionary” @Rune:k.Value.ToString() 的返回值是否始终与(string)k.Value 相同? @Oscar:不。如果值是非字符串对象,则 (string)k.Value 将失败。 ToString() 对于所有非空值都是安全的。 @Rune:是的,我知道。假设所有元素都是字符串。 ToString()(string) 会返回相同的结果吗? 我可以建议改用Convert.ToString()。所以处理null 值会容易一些。 Convert.ToString(keyValuePair.Value)Convert.ToString(keyValuePair.Value) ?? String.Empty【参考方案2】:

.NET 3.5:

Dictionary<string, string> result = dObject.ToDictionary(kvp => kvp.Key, kvp => Convert.ToString(kvp.Value));

.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));

【讨论】:

【参考方案3】:

由于您使用的是 .net 2.0:

Dictionary<string, string> dString = new Dictionary<string, string>();

foreach (KeyValuePair<string, object> item in dObject)

    dString.Add(item.Key, item.Value.ToString());
    //here item.Value.ToString() is an example
    //you should convert your item to string according to the requirement

【讨论】:

如果里面有NULL值怎么办? @MKS:这就是为什么我说“根据要求将您的项目转换为字符串”,例如您可以将string.Empty 用于空值,或者将字符串“NULL”用于空值...一切都取决于要求。 有时候key里面也有空值,请问如何转换?【参考方案4】:

怎么样:

Dictionary<string, string> newDictionary = dObject.ToDictionary(k => k.Key, k => (string) k.Value);

【讨论】:

如果字典包含非字符串值,这将失败。例如,您不能将 int 转换为字符串。 首先我使用的是.NET 2.0,在里面是可以的。我没有得到“ToDictionary”方法。 好吧,我想如果他想这样做是因为字典包含strings,但无论如何,这是有效的。 是的,是的。但是 ToString 并不总是产生一个好的字符串。无论如何,这一切都取决于您的 Dictionary 对象。 :) 由于您使用的是.NET 2.0,foreach 将是您最好的伙伴!总帐【参考方案5】:

在 .Net 2.0 中,您最好的朋友可能是 foreach 循环:

Dictionary<string, object> dObject = new Dictionary<string, object>();
Dictionary<string, string> newObjects = new Dictionary<string, string>();

foreach (KeyValuePair<string, object> keyValuePair in dObject)

    newObjects.Add(keyValuePair.Key, keyValuePair.Value.ToString());

【讨论】:

【参考方案6】:
Dictionary<string, string> dString = dObject.ToDictionary(kvp => kvp.Key, kvp => kvp.Value.ToString());

这只是想法。您可以插入任何验证。

【讨论】:

以上是关于如何在 C# 中将 Dictionary<string, object> 转换为 Dictionary<string, string>的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中将 IEnumerable<T> 转换为 List<T>?

在 C# 中将 HashTable 转换为字典

如何将对象转换为Dictionary 在C#?

如何在 ASP.NET 中将 JSON 反序列化为简单的 Dictionary<string,string>?

在 C# 中将字典映射到数组的最快方法

如何在 C# 中更新存储在 Dictionary 中的值?