C#动态类型比较导致异常NotSupportedException

C#动态类型比较导致异常NotSupportedException,c#,exception,dynamic,C#,Exception,Dynamic,在下面的代码中,对动态类型执行比较时会引发异常。注意:我已经为VS2010中的所有异常启用了中断(在调试->异常下)。触发的异常是“公共语言运行时异常”下的“System.NotSupportedException”。如果在此异常之后继续或关闭它,代码将正确运行 1) 不是所有的例外都是坏的,应该加以解决(不要忽略) 2) 其他人是否在VisualStudio中启用了所有异常中断 3) 在“MyMethod(0)”案例中,“value”在运行时解析为int。我相信即使int不是引用类型,也可以将

在下面的代码中,对动态类型执行比较时会引发异常。注意:我已经为VS2010中的所有异常启用了中断(在调试->异常下)。触发的异常是“公共语言运行时异常”下的“System.NotSupportedException”。如果在此异常之后继续或关闭它,代码将正确运行

1) 不是所有的例外都是坏的,应该加以解决(不要忽略)

2) 其他人是否在VisualStudio中启用了所有异常中断

3) 在“MyMethod(0)”案例中,“value”在运行时解析为int。我相信即使int不是引用类型,也可以将“value”与null进行比较。这是因为值在下面仍然是真正的动态类型(非常类似于对象),这是ref类型。因此,除了类型dynamic(即null比较)的特性外,dynamics还具有运行时评估类型(即value++)的所有功能


虽然我无法重现您的问题,但FWIW,
null
是一种特殊的值类型,而不是引用类型。

我尝试过您的代码或类似的东西,但没有得到异常。我有


异常是否可能来自您未显示的内容({…})?

无需重新显示。检查您的代码片段。问题似乎是我的日志系统Gilbraltar(类似于NLog)。由于某种原因,当这个日志系统启动时,它会以某种方式间接地导致任何未来的动态语句比较产生NotSupportException异常(非常棘手)。我只有在意识到其他人看不到例外情况后,才能通过试错来检测这种间接腐蚀。如果我能找到潜在的问题,我会再次发布。
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
}