IDictionary в строку

Я создал IDictionary расширение для записи IDictionary Exception.Data значения в строку.

Код расширения:

public static class DictionaryExtension
{
    public static string ToString<TKey, TValue>(this IDictionary<TKey, TValue> source, string keyValueSeparator, string sequenceSeparator)
    {
        if (source == null)
            throw new ArgumentException("Parameter source can not be null.");

        return source.Aggregate(new StringBuilder(), (sb, x) => sb.Append(x.Key + keyValueSeparator + x.Value + sequenceSeparator), sb => sb.ToString(0, sb.Length - 1));           
    }
}

Когда я использую это расширение на Exception.Data.ToString("=", "|") Я получаю ошибку

The type arguments cannot be inferred from the usage.

Есть идеи, как это решить?

2 ответа

Решение

Exception.Data имеет тип IDictionary не IDictionary<TKey, TValue>,

Вам нужно изменить свой метод расширения на это:

public static string ToString(this IDictionary source, string keyValueSeparator,
                                                       string sequenceSeparator) 
{ 
    if (source == null) 
        throw new ArgumentException("Parameter source can not be null."); 

    return source.Cast<DictionaryEntry>()
                 .Aggregate(new StringBuilder(),
                            (sb, x) => sb.Append(x.Key + keyValueSeparator + x.Value
                                                  + sequenceSeparator),
                            sb => sb.ToString(0, sb.Length - 1));            
} 

Исключение указывает на то, что вы пропустили актерский состав. Я скопировал ваш код в тестовый проект, но не смог воспроизвести вашу ошибку. Попробуйте использовать x.Key.ToString() а также x.Value.ToString(), Единственное, что я обнаружил, это ошибка, возникающая, когда словарь пуст: sb.ToString(0, sb.Length - 1) когда ноль не работает

Другие вопросы по тегам