【问题标题】:Casting: Same Types in debug mode but unable to cast投射:调试模式下的相同类型但无法投射
【发布时间】:2011-08-11 03:23:12
【问题描述】:

我有一个非常奇怪的问题。我正在尝试投射一个对象,即使在调试模式下它显示两个对象相同,它也无法投射。这是代码

if (messageResponse is T)
            {
                response = (T)messageResponse;
            }

在调试模式下,我将鼠标悬停在 is 并且它的计算结果为 true,但它会跳过 if 块并转到 else,现在显示在此处。另外,当我强制执行到 if 块时,我会收到此错误消息

[A]AutoAnything.BusinessServer.Messages.GetConfigurationSettingMessageResponse1[AutoAnything.BusinessServer.DataObjects.Settings.ApplicationManager.ApplicationSettings] cannot be cast to [B]AutoAnything.BusinessServer.Messages.GetConfigurationSettingMessageResponse1[AutoAnything.BusinessServer.DataObjects.Settings.ApplicationManager.ApplicationSettings] . A型起源于 'AutoAnything.BusinessServer.Messages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 在位置'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files'的上下文'Default'中\root\2dc64af3\f4e18fc8\assembly\dl3\88929564\4b299f15_0bfecb01\AutoAnything.BusinessServer.Messages.DLL'。 B型起源于 'AutoAnything.BusinessServer.Messages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 在位置'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files'的上下文'Default'中\root\2dc64af3\f4e18fc8\assembly\dl3\88929564\4b299f15_0bfecb01\AutoAnything.BusinessServer.Messages.DLL'。

如您所见,对象 [A] 和 [B] 据说是相同的。有没有人见过这个?另外,我正在使用反射来调用上面代码的包含方法。

【问题讨论】:

    标签: visual-studio debugging generics types


    【解决方案1】:

    这里的问题是,当您在调试器中评估表达式时,它实际上并没有运行代码。相反,它实际上是在做一些更接近于解释相关表达式的事情。

    通常,解释产生与实际代码评估相同的结果,但在某些情况下它会失败。更难纠正的领域之一是类型。调试器很可能只是在悬停时错误地评估了该表达式。

    【讨论】:

    • 有什么办法可以得到这些类型的输出吗? Trace.WriteLine,或任何其他建议?
    • 还有错误信息呢?这只是一种解释还是实际运行的代码?
    • 我试过 Trace.Writeline 不幸的是它仍然输出同样的东西
    • @Lizzard,有问题的类型有隐式转换运算符吗?
    • @JaredPar,不,它没有隐式转换运算符
    猜你喜欢
    • 2017-03-17
    • 2021-05-28
    • 1970-01-01
    • 2012-06-09
    • 2012-04-29
    • 2014-06-04
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多