【发布时间】:2011-02-09 08:18:24
【问题描述】:
我在 C# 中有以下代码
Dictionary<string, object> dObject = new Dictionary<string, object>();
我想将dObject 转换为Dictionary<string, string>。我该怎么做?
【问题讨论】:
我在 C# 中有以下代码
Dictionary<string, object> dObject = new Dictionary<string, object>();
我想将dObject 转换为Dictionary<string, string>。我该怎么做?
【问题讨论】:
使用 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());
}
【讨论】:
k.Value.ToString() 的返回值是否始终与(string)k.Value 相同?
ToString() 和 (string) 会返回相同的结果吗?
Convert.ToString()。所以处理null 值会容易一些。 Convert.ToString(keyValuePair.Value) 或 Convert.ToString(keyValuePair.Value) ?? String.Empty
.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));
【讨论】:
由于您使用的是 .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
}
【讨论】:
string.Empty 用于空值,或者将字符串“NULL”用于空值...一切都取决于要求。
怎么样:
Dictionary<string, string> newDictionary = dObject.ToDictionary(k => k.Key, k => (string) k.Value);
【讨论】:
strings,但无论如何,这是有效的。
在 .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());
}
【讨论】:
Dictionary<string, string> dString = dObject.ToDictionary(kvp => kvp.Key, kvp => kvp.Value.ToString());
这只是想法。您可以插入任何验证。
【讨论】: