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)
когда ноль не работает