我从Most efficient Dictionary.ToString() with formatting?得到了这个问题,但我的问题是如果V是List,那么如何让它工作。现在我的解决方案是, 改变
itemString.AppendFormat(format, item.Key, item.Value);
到
itemString.AppendFormat(format, item.Key, item.Value.ToDelimitedStr());
这是ToDelimitedStr的代码:
public static string ToDelimitedStr<T>(this T source)
{
// List<string>
if (source is IList &&
source.GetType().IsGenericType)
{
Type t1 = source.GetType().GetGenericArguments()[0];
if (t1.Name == "String")
((IEnumerable<string>)source).ToDelimitedString();
}
return source.ToString();
}
仅适用于List<string>
。我如何才能使它更通用?
此外,我在思考,也许我不应该在
public string DictToString<T, V>(IEnumerable<KeyValuePair<T, V>> items, string format)
我应该创建一个像
这样的新版本public string DictListToString<T, List<V>>(IEnumerable<KeyValuePair<T, List<V>>> items, string format)
那怎么样?
非常感谢
韦斯
答案 0 :(得分:0)
使用string.Join
return string.Join("," , (IList<T>)source);
我认为如果你为ToDelimitedStr
添加一个以IEnumerable<T>
作为参数的overloead会更容易,那么你就不需要进行类型检查了:
public static string ToDelimitedStr<T>(this IEnumerable<T> source)
{
return string.Join(",", source);
}
答案 1 :(得分:0)
使用IEnumerable
,只需在项目上调用ToString
:
public static string ToDelimitedStr<T>(this T source)
{
// Will work for ANY IEnumerable
if (source is IEnumerable) // <----------------
{
IEnumerable<string> items =
((IEnumerable)source).OfType<object>()
.Select(o => o.ToString());
// convert items to a single string here...
return string.Join(", ", items);
}
return source.ToString();
}