如何将字典转换为定义该字典的C#代码?(类似于python中的repr()。)
示例:
var dict = new Dictionary<int, string> {
{ 4, "a" },
{ 5, "b" }
};
Console.WriteLine(dict.ToCsharpString());输出:
Dictionary<int, string> {
{ 4, "a" },
{ 5, "b" }
}我最感兴趣的是包含原始类型的字典。
类似的问题:格式化的最有效的Dictionary.ToString()? (专注于效率),是否有方便地将字典转换为字符串? (想要不同的输出格式)。
发布于 2019-07-18 18:47:46
基于有关问题的加布的回答,下面是一个扩展方法解决方案:
public static string ToCsharpString<TKey,TValue>(this IEnumerable<KeyValuePair<TKey, TValue>> items) {
StringBuilder str = new StringBuilder();
string type_name = items.GetType().Name;
int index = type_name.LastIndexOf('`');
if (index == -1) {
index = type_name.Length;
}
str.Append(type_name, 0, index);
str.AppendFormat("<{0}, {1}>", typeof(TKey).Name, typeof(TValue).Name);
str.Append(" {\n");
foreach (var item in items) {
str.AppendFormat("\t{{ {0}, {1} }},\n", ToLiteral(item.Key), ToLiteral(item.Value));
}
str.Append("}");
return str.ToString();
}
static string ToLiteral(object obj) {
string input = obj as string;
if (input == null)
return obj.ToString();
// https://stackoverflow.com/a/324812/79125
using (var writer = new StringWriter()) {
using (var provider = CodeDomProvider.CreateProvider("CSharp")) {
provider.GenerateCodeFromExpression(new CodePrimitiveExpression(input), writer, null);
return writer.ToString();
}
}
}输出略有不同,因为它打印框架类库类型而不是原始类型(Int32而不是int),但是它运行得很好:
Dictionary<Int32, String> {
{ 4, "a" },
{ 5, "b" },
}有待改进的地方:
https://stackoverflow.com/questions/57100909
复制相似问题