我有一个IDictionary
(不是IDictionary<TKey, TValue>
),想从中获取键和值。
最后,我希望将键和值作为字符串,例如key1=value1;key2=value2;...
,但首先我需要正确地转换那些对。
我已经尝试了IDictionary to string之类的一些解决方案,但没有一个适用于IDictionary
。
我要阅读的字典是Exception.Data
字典。
答案 0 :(得分:1)
在IDictionary实例上使用foreach循环创建所需的字符串
IDictionary具有“键和值”属性,但是您可以使用GetEnumerator
返回DictionaryEntry
的扩展方法来实现您的目标:
using System.Collections;
static public class IDictionaryHelper
{
static public string ToStringFormatted(this IDictionary dictionary,
char separator = ';')
{
string result = "";
foreach (DictionaryEntry item in dictionary)
result += $"{item.Key.ToString()}={item.Value.ToString()}{separator}";
return result.TrimEnd(separator);
}
}
测试
using System.Collections.Generic;
IDictionary myDictionary = new Dictionary<string, int>();
myDictionary.Add("a", 1);
myDictionary.Add("b", 2);
myDictionary.Add("c", 3);
Console.WriteLine(myDictionary.ToStringFormatted());
输出
a=1;b=2;c=3
如果需要解析大型集合,可以使用StringBuilder
using System.Collections;
using System.Text;
static public string ToStringFormatted(this IDictionary dictionary, char separator = ';')
{
var builder = new StringBuilder();
foreach ( DictionaryEntry item in dictionary )
builder.Append($"{item.Key.ToString()}={item.Value.ToString()}{separator}");
return builder.ToString().TrimEnd(separator);
}
如果要获取键和值的列表
var keys = dictionary.Keys;
var values = dictionary.Values;
var listKeys = new List<object>();
var listValues = new List<object>();
foreach ( var item in keys )
listKeys.Add(item);
foreach ( var item in values )
listValues.Add(item);
答案 1 :(得分:0)
这应该可以完成
StringBuilder sb = new StringBuilder();
foreach (DictionaryEntry entry in (IDictionary)dictionary)
{
sb.Append($"{entry.Key}={entry.Value};");
}
return sb.ToString();