字典<k,v> .ToString()更通用的实现</k,v>

时间:2014-03-31 13:52:45

标签: c# dictionary tostring

我从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)
那怎么样?

非常感谢

韦斯

2 个答案:

答案 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();
}