如何在 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<string, string>
。我该怎么做?
【问题讨论】:
【参考方案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<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” @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>?