Я возился с написанием пользовательских исключений и реализацией сериализации для них. Я заметил, что если я null проверить экземпляр SerializationInfo перед доступом к одному из его членов, ReSharper говорит мне, что проверка является избыточной и что, как известно, экземпляр не имеет значения null. Это не тип значения, но выкалывание на Reference Source показало мне, что конструктор по умолчанию отсутствует. Это как ReSharper может сказать, что это не будет null? Есть еще одна причина? Возможно, это ошибка?SerializationInfo Экземпляры никогда не являются нулевыми?
2
A
ответ
0
Я думаю, это потому, что вы вызываете конструктор базового класса Exception. Что-то вроде этого:
protected SomeException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
if (info != null)
{
// Some work...
}
}
Resharper знает, что внутри базы проверки конструктора для информации параметров. Я думаю, что это соответствует официальной документации MSDN:
Исключения:
ArgumentNullException - параметр информации имеет значение NULL.
SerializationException - Имя класса равно null или HResult равен нулю (0).
if (info == null)
throw new ArgumentNullException("info");
Если базовый конструктор называется, то вы получите значение или исключение.
Так что Resharper говорит, что выражение всегда верно. И на этот раз это правильно, потому что документация, скорее всего, никогда не будет изменена. Но во многих других случаях мне не нравится то, что предлагает Решарпер.
Смежные вопросы
- 1. Custom SerializationInfo
- 2. Silverlight 5 serializationInfo
- 3. Ячейки не являются нулевыми, но показывает null
- 4. Только обновлять поля, которые не являются нулевыми
- 5. Найдите отсутствующие записи, которые не являются нулевыми
- 6. Число всех колонок, которые не являются нулевыми
- 7. Найти дубликаты, которые не являются нулевыми mongodb
- 8. проверьте, что значения не являются нулевыми.
- 9. NullPointerException, даже если переменные не являются нулевыми.
- 10. NullPointerException, хотя переменные не являются нулевыми
- 11. Данные в транзакции являются нулевыми
- 12. Android Dagger @Injects являются нулевыми
- 13. проверить, если array_values являются нулевыми
- 14. Mysqli_query и mysqli_fetch_assoc являются нулевыми
- 15. RestAssuredMockMvc - Репозитории Autowire являются нулевыми
- 16. Новые экземпляры WebBrowser никогда не загружаются?
- 17. passport.authenticate - имя пользователя и пароль являются нулевыми
- 18. ISERializable.GetObjectData (SerializationInfo, StreamingContext)
- 19. Являются ли статические экземпляры асинхронными?
- 20. «Аргументы методов никогда не являются обязательными»?
- 21. Выбор значений, которые не являются нулевыми или пустыми, не работает
- 22. SSRS - проверка того, являются ли данные нулевыми
- 23. значения столбца обновления, которые являются нулевыми
- 24. XmlDocument - ParentNode и DocumentType являются нулевыми
- 25. «данные» являются нулевыми или нет объектами IE8
- 26. Пользовательские текстовые поля являются числовыми (и нулевыми)
- 27. Слова, прочитанные из файла, являются нулевыми
- 28. request.getattribute являются нулевыми, а некоторые имеют данные
- 29. SqlNullValueException: данные являются нулевыми по вызову Json
- 30. Бобы являются нулевыми, отклоненное имя боба BeanNameUrlHandlerMapping
Это уже используется где-то еще в коде перед этим утверждением? –
@BenjaminDrolet - он используется как параметр в конструкторе, который получен из базового конструктора Exception с тем же параметром. Он также используется как параметр в переопределении базового метода GetObjectData. – bubbleking
@bubbleking [this] (http://stackoverflow.com/questions/5067819/how-does-resharper-know-expression-is-always-true), вероятно, отвечает на ваш вопрос – galenus