Динамические сравнения типов в C # вызывают исключение NotSupportedException - PullRequest
0 голосов
/ 24 ноября 2011

В приведенном ниже коде исключение выдается при сравнении динамического типа.Примечание. У меня есть возможность прерывания для всех исключений в VS2010 (в разделе «Отладка -> Исключения»).Исключением является «System.NotSupportedException» в «Общих исключениях времени выполнения».Если я продолжаю работу после этого исключения или выключаю его, код работает правильно.

1) Разве все исключения не являются плохими и должны быть устранены (не проигнорированы)?

2) Все остальные включаютсявсе исключения исключений в Visual Studio?

3) В «MyMethod (0)» значение «case» преобразуется в int во время выполнения.Я считаю, что это хорошо, чтобы сравнить «значение» с нулевым, хотя int не является ссылочным типом.Это потому, что значение все еще действительно динамического типа внизу (очень похоже на объект), который является типом ref.Следовательно, в динамике будут все возможности своего оцениваемого типа во время выполнения (т. Е. Значение ++) в дополнение к функциям динамического типа (т. Е. Нулевое сравнение).

MyMethod(0); // Causes problems (value runtime type is int)
MyMethod(null); // Causes problems (value runtime type is ref?)

public dynamic MyMethod(dynamic value)
{
  if (value != null) {...}// Throws NotSupportedExpception
  if (value != 0) {...} // Throws NotSupportedExpception
}

Ответы [ 2 ]

0 голосов
/ 24 ноября 2011

Я попробовал ваш код или что-то подобное и не получил исключения.У меня есть

Возможно ли, что исключение происходит из-за того, что вы не показываете ({…})?

0 голосов
/ 24 ноября 2011

Хотя я не смог воспроизвести вашу проблему, FWIW, null - это особый тип значения, а не ссылочный тип.

...