Учитывая следующее отслеживание стека:
MESSAGE: Value cannot be null.Parameter name: key
SOURCE: mscorlib
TARGETSITE: Void ThrowArgumentNullException(System.ExceptionArgument)
STACKTRACE:
at System.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument)
at System.Collections.Generic.Dictionary'2.FindEntry(TKey key)
at System.Collections.Generic.Dictionary'2.get_Item(TKey key)
at MyCompany.MAF.Agent.ServiceContracts.ConvertUtils.Convert(Dictionary'2 from) in D:\Development\MAF\Agent\MyCompany.MAF.Agent\ServiceContracts\ConvertUtils.cs:line 11
Я прихожу к заключению, что так или иначе следующий блок кода получил пустой указатель от входного набора Ключей Словаря. Однако входной словарь является экземпляром Dictionary<string, string>
. Реализация Dictionary<string, string>
делает то условие невозможным. После добавления объекта с пустым ключом выдается исключение.
internal static KeyValuePair<string, string>[] Convert(IDictionary<string, string> from)
{
List<KeyValuePair<string, string>> ret = new List<KeyValuePair<string, string>>();
foreach (string key in from.Keys)
ret.Add(new KeyValuePair<string, string>(key, from[key]));
return ret.ToArray();
}
У меня эта проблема возникала часто, потому что я допускал ошибку, позволяя нескольким потокам обращаться к одному и тому же словарю. Убедитесь, что это не так, потому что Dictionary
не является потокобезопасным.
(Кстати, ваш метод можно значительно упростить. Dictionary
уже является IEnumerable
. Вы должны быть в состоянии просто выполнить ToArray
для одного из них.
Похоже, что ваш аргумент IDictionary
содержит элемент с параметром Key
, который имеет значение NULL.
Проверка параметров для IDictionary
, вероятно, будет происходить где-то внутри во фреймворке.
Structure101 предоставляет эту возможность как в графическом формате, так и в формате list/treeview . Это коммерческая, но не дорогая, и вы можете злоупотреблять пробной лицензией, если это быстрая работа.
-121--5044363-Если вы находитесь на сервере на базе Debian (например, Ubuntu), вы можете выполнить следующую команду:
apt-get install php5-gd
После завершения выполнения:
/etc/init.d/apache2 restart
Это перезапустит ваш сервер и включит GD в PHP.
Если вы находитесь в системе другого типа, вам нужно будет использовать что-то другое (например, yum install) или компилировать непосредственно в PHP.
-121--1071983- Это исключение происходит, если ключ словаря имеет значение null
. Поскольку встроенный класс Dictionary
не допускает использование таких ключей, возможно, используется собственный класс IDictionary
- совместимый класс, который допускает null
.
Не уверен насчет значения NULL, но почему вы не используете:
internal static KeyValuePair<string, string>[] Convert(IDictionary<string, string> from)
{
return from.ToArray();
}
Изменить: Что касается значений NULL. У вас есть несколько потоков, обращающихся к этому IDictionary? Повреждение возможно, если вы не обеспечиваете потокобезопасность. См. Этот пост для примера коррупции в классе
Queue<T>
Возможно ли, что другой поток влияет на директорию, передаваемую в Convert?