Специализируйте универсальную переменную

Поскольку вы печатаете одно и то же сообщение во всех трех местах, где исключено исключение, трудно сказать с какой-либо определенностью, что происходит:

  • Используйте printStackTrace(), чтобы узнать где происходит исключение
  • Не поймайте Exception, как это. Поймите исключения, которые вы ожидаете, и что ваш код предназначен для обработки. Если вы поймаете Exception, вы можете поймать всевозможные неожиданные исключения (NPE, конец файла и т. Д.) ... и неправильно сообщать о них как «Недопустимый формат».
1
задан Mark Hurd 25 July 2010 в 08:30
поделиться

2 ответа

В этом конкретном случае есть один более простой вариант: вызовите ToString() для значения. Для строки это просто вернет исходную ссылку.

В общем случае вам придется конвертировать значение из объекта в объект и обратно, что, к сожалению, довольно некрасиво. С точки зрения производительности, я был бы весьма удивлен, если бы обнаружил, что это узкое место - но я подозреваю, что вызов ToString() так же эффективен, как и все остальное.

2
ответ дан 2 September 2019 в 22:47
поделиться

Теперь я фактически проанализировал код с помощью Reflector (но на самом деле заботился только об эквиваленте вывода ILDASM - на самом деле средство визуализации C # и VB.NET не отображает приведение к объект в любом направлении):

DirectCast (DirectCast (value, Object), String) скомпилирован в

 box !!T
 castclass string

, но DirectCast (DirectCast (newvalue, Object), T) скомпилирован в

 unbox.any !!T

Так что я доволен этим (поскольку я действительно заботился только о приведении к T, как я сказал в своем комментарии к ответу Джона Скита).

0
ответ дан 2 September 2019 в 22:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: