Как разработчик, мы часто встречаемся с тем исключением: NullReferenceException
с известным сообщением об ошибке:
Ссылка на объект не набор к экземпляру объекта
Разве для платформы.NET не возможно возвратить что-то значимое?
Что-то, такое как:
Объект типа X по имени Y не набор к экземпляру объекта
Потому что это самый общий способ сказать это.
-121--4605403-Тестовую рамку shoulda имеет превосходный помощник, который позволяет утверждать определенные условия относительно электронного письма, которое было sent. Да, вы могли бы сделать это самостоятельно с ActionMailer.deliveries, но shoulda делает это все один аккуратный маленький блок
-121--1110401-Объект не имеет имени - так как он может сказать вам имя? Нулевая ссылка может быть загружена из переменной - или она могла быть возвращена методом, свойством и т. д.
JIT может , вероятно, просмотреть информацию стека, чтобы выяснить, каким был объявленный тип ссылки, но я не уверен, как часто это поможет - и, несомненно, это замедлит ситуацию.
Я не могу сказать, что когда-либо находил, что это огромное бремя, когда дело доходит до отладки - если есть много вещей, которые могут быть нулевыми в одной строке, это обычно говорит о том, что стоит разделить их больше.
Мне это походит просто на проблему предпочтения. Если это прослушивает вас так очень, вы могли бы всегда разделять на подклассы NullReferenceException
и изменять сообщение. :)
, К чему это сводится, хотя объем информации, доступный, когда сообщение создается. Вручную не передавая в некоторой дополнительной информации, просто определяя название поля, которое было пустым в , NullReferenceException
потребует отражения (возможно не так мало), который является операцией довольно большой нагрузки. Взять, например, ArgumentNullException
для броска того, в котором сообщение указывает на незаконное название параметра, необходимо передать в последовательности при вызове его: бросают новый ArgumentNullException ("param1")
.
уровень детализации в сообщении об исключении полностью до программиста, который определяет его, но благоразумно постараться не делать что-либо система, интенсивная при выдаче исключения.
Я только что просмотрел эту же проблему с оболочкой .Net для библиотеки FreeImage. Я создал две конфигурации сборки: одну для x86 и одну для x64 для проекта, ссылающегося на управляемую оболочку. Я добавил разделы условной копии msbuild в цель AfterBuild файла проекта так:
<Target Name="AfterBuild">
<Copy Condition="'$(Platform)' == 'X86'" SourceFiles="$(MSBuildProjectDirectory)\Resources\x86\FreeImage.dll" DestinationFolder="$(TargetDir)" />
<Copy Condition="'$(Platform)' == 'X64'" SourceFiles="$(MSBuildProjectDirectory)\Resources\x64\FreeImage.dll" DestinationFolder="$(TargetDir)" />
</Target>
-121--4349624- Я нашел действительно очень плохой обходной путь. Для передачи свойства id можно использовать атрибут title.
fixMarkerId = function () {
$('div[title^="mtg_"]').each(function (index, elem) {
el = $(elem);
el.attr('id', el.attr('title'));
el.removeAttr('title');
});
},
tryAgainFixMarkerId = function () {
if ($('div[title^="mtg_"]').length) {
fixMarkerId();
} else {
setTimeout(function () {
tryAgainFixMarkerId();
}, 100);
};
}
if ($('div[title^="mtg_"]').length) {
fixMarkerId();
} else {
setTimeout(function () {
tryAgainFixMarkerId();
}, 100);
};
Я настоятельно не рекомендую это решение для любой производственной среды. Но пока я использую его, чтобы продолжать развиваться. Но все равно ищу лучшее решение.
-121--2541554-Потому что это самый общий способ сказать это.