我想写一个扩展方法,这将有助于快速查看IEnumerable<KeyValuePair<object, object>>
的内容。我在正确书写我的签名时遇到了一些麻烦。下面的代码适用于字符串,但我希望能够在任何通用类型的KeyValuePair上使用它。如果将它更改为接受IEnumerable<KeyValuePair<object, object>>
然后尝试在Dictionary<string,string>
类型上调用它类型我得到一个编译器错误“实例参数:无法从'System.Collections.Generic.Dictionary'转换为'System.Collections.Generic.IEnumerable>'”,尽管Dictionary<TKey, TValue>
实现接口IEnumerable<KeyValuePair<TKey, TValue>>
。函数接受通用的IEnumerable的KeyValuePair
public static string ToHumanReadableString(this IEnumerable<KeyValuePair<string, string>> dictionary)
{
if (dictionary.IsNull())
{
return "{null}";
}
StringBuilder sb = new StringBuilder();
foreach (KeyValuePair<string, string> kvp in dictionary)
{
if (!kvp.Value.IsNull())
{
sb.AppendLineAndFormat("{0}={1}", kvp.Key.ToString(), kvp.Value.ToString());
}
else
{
sb.AppendLineAndFormat("{0}={null}", kvp.Key.ToString());
}
}
return sb.ToString();
}
为什么不让你的方法在TKey和TValue上是通用的? – Magus
你可以发布你的代码吗?我尝试将签名更改为公共静态字符串ToHumanReadableString(此IEnumerable>字典)',但它说“无法找到类型或命名空间'TKey'” –
mason
您必须将尖括号在parens之前的tkey和tvalue。 – Magus