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


68

我在C#中有以下代码

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

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

Answers:


105

使用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<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());
}

编辑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”消息-Manoj
Singh

@Rune:k.Value.ToString()返回值是否始终相同(string)k.Value
奥斯卡·梅德罗斯

@Oscar:否。如果值是非字符串对象,则(string)k.Value将失败。ToString()对于所有非null值都是安全的。
符文·格里姆斯塔德

@Rune:是的,我知道。假设所有元素都是字符串。将ToString()(string)返回相同吗?
奥斯卡·梅德罗斯

1
我建议Convert.ToString()改用。因此,处理null价值观会更容易一些。 Convert.ToString(keyValuePair.Value)Convert.ToString(keyValuePair.Value) ?? String.Empty
Jeff Mercado

9

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

4

由于您使用的是.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值怎么办?
Manoj Singh

3
@MKS:这就是为什么我要说“根据要求将项目转换为字符串”的原因,例如,您可以将其string.Empty用于null值,或者将字符串“ NULL”用于null值...一切都取决于要求。
Cheng Chen

有时,键中也可能存在空值,请提出如何转换它的建议?
Manoj Singh

2

怎么样:

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

如果字典包含非字符串值,这将失败。例如,您不能将int转换为字符串。
符文格里姆斯塔德

首先,我正在使用.NET 2.0。我没有得到“ ToDictionary”方法。
Manoj Singh

好吧,我想他是否要这样做是因为字典中包含strings,但是无论如何都是有效的。
奥斯卡·梅德罗斯

是的,是的。但是ToString并不总是产生一个不错的字符串。无论如何,这都取决于您的Dictionary对象。:)
Arcturus

1
由于您使用的是.NET 2.0,因此foreach将是您最好的伙伴!GL
Arcturus

1

在.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());
}

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

这只是个主意。您可以插入任何验证。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.