【问题标题】:C# dynamic type comparisons cause exception NotSupportedExceptionC# 动态类型比较导致异常 NotSupportedException
【发布时间】:2011-11-25 00:27:11
【问题描述】:

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

1) 不是所有的异常都是不好的,应该解决(不忽略)吗?

2) 其他人是否在 Visual Studio 中打开所有异常中断?

3) 在“MyMethod(0)”情况下,“值”在运行时解析为 int。我相信即使 int 不是引用类型,也可以将“值”与 null 进行比较。是不是因为 value 在下面仍然是真正的动态类型(与 object 非常相似),它是 ref 类型。因此,除了动态类型的特性(即空值比较)之外,动态还具有其运行时评估类型(即 value++)的所有能力。

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
}

【问题讨论】:

  • 无复制。检查您的代码 sn-p。

标签: c# exception dynamic


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我已经尝试过您的代码或类似的代码,但没有出现异常。我有

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

    【讨论】:

    • 问题似乎出在我的日志系统 Gilbraltar(类似于 NLog)。由于某种原因,当这个日志系统启动时,它会以某种方式间接导致任何未来的动态语句比较产生 NotSupportException 异常(非常棘手)。在意识到其他人没有看到异常之后,我只能通过尝试错误来检测这种间接关联。如果我能找到根本问题,我会再次发布。
    猜你喜欢
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 2018-06-23
    • 2012-09-14
    • 1970-01-01
    • 2018-03-07
    • 2021-02-09
    相关资源
    最近更新 更多