Почему InvalidEnumArgumentException устарел в Silverlight 4? - PullRequest
3 голосов
/ 26 сентября 2011

Я был удивлен, обнаружив, что InvalidEnumArgumentException устарел в Silverlight 4.

Кто-нибудь знает, почему это так?Я обнаружил, что это довольно полезное исключение, особенно при ручной десериализации двоичных данных до значений перечисления.

[ObsoleteAttribute(
  "InvalidEnumArgumentException is obsolete. Use ArgumentException instead.")]
public class InvalidEnumArgumentException : Exception

1 Ответ

4 голосов
/ 28 сентября 2011

Вы правы, оно помечено как устаревшее, но полностью там (здесь правильная ссылка, указывающая на версию Silverlight класса )

Я думаю, что на этот конкретный вопрос «почему» сложно ответить всем, кто здесь не работает в Microsoft и не участвует в процессе рассмотрения таких изменений. Вероятно, в Microsoft есть какой-то документ, объясняющий основные причины, по которым он помечен как устаревший в текущей версии. Это так, как сейчас, и я боюсь, что вам, возможно, придется с этим жить.

Из интереса я немного погуглил с bing, и эта ТА-тема здесь была лучшим хитом по теме, которую я смог найти. Даже поиск на Silverlight.net не даст результатов. Так что либо вам нужен золотой партнерский контракт (или как его там называют) и обратитесь к ребятам из Microsoft напрямую по этому вопросу.

Тем не менее, кажется, что это то же самое исключение происходит немного противоречиво, независимо от того, является ли его хорошей практикой использовать его или нет, я хотел бы процитировать комментарий к этой ссылке , говоря о несоответствиях: *

К сожалению, поскольку InvalidEnumArgumentException определено в System.dll, а не mscorlib.dll, позже не бросает его, когда неверный аргумент перечисления передается члену, но вместо этого выдает ArgumentException или ArgumentOutOfRangeException. Это несоответствие однако, как правило, не представляет проблемы, так как это исключение, когда брошенный, обычно указывает на ошибку в вызывающей программе и редко ловится в предложении поймать.

Так что, возможно, это также повлияло на все обстоятельства, которые привели к удалению его из Silverlight. Или нет. Может быть, это просто потому, что они думали, что это ненужные накладные расходы, так сказать, потому что вы, вероятно, в любом случае перехватываете ArgumentExceptions, и большинство реализаций ничего не получают, продолжая разбирать его. Это всего лишь предположение, но я боюсь, что вы не получите ничего лучше, чем это (помимо других случайных догадок).

Вы, конечно, можете добавить свою собственную реализацию InvalidEnumArgumentException, если хотите, и я думаю, что вы уже сделали это.

...