gpt4 book ai didi

c# - 动态对象适用于一台 PC 但不适用于另一台 PC

转载 作者:行者123 更新时间:2023-11-30 21:04:07 28 4
gpt4 key购买 nike

我构建了一个使用 Dynamic 关键字的程序。

在我的代码中,我这样做了:

public void OnNext(ExpandoObject value)
{
dynamic expando = value;
if (expando.Attention == NotifyEnums.ALERT)
{
_needsAttention = true;
}
}

这行得通,所以我将其提交给 SourceControl。然后我的老板获取文件,尝试运行它但在 if (expando.Attention == NotifyEnums.ALERT) 行出现错误,显然 expando.Attention 在动态对象中不存在:

enter image description here

这让我非常困惑,因为我们都针对相同的 .NET 版本:.NET Framework 4 Platform Update 1 KB2478063,而且我知道该值已在代码中设置。

所以我在读取动态值之前设置了一个断点,并打开了立即窗口。

expando.Attention//在老板电脑上给出异常,在我的电脑上工作

但是请看以下内容:

(((IDictionary<String, object>)expando).ContainsKey("Attention"))
true // Returns "True" on boss computer and on my computer, WTF!

所以我尝试以下操作:

(NotifyEnums)(((IDictionary<String, Object>)expando)["Attention"])
ALERT // Returns alert on boss computer

总结一下:

public void OnNext(ExpandoObject value)
{
dynamic expando = value;
if (expando.Attention == NotifyEnums.ALERT)
// CRASHES on boss pc, works on my pc
// Error says Attention does not exist.
{
_needsAttention = true;
}
}

public void OnNext(ExpandoObject value)
{
dynamic expando = value;
if ((NotifyEnums)(((IDictionary<String, Object>)expando)["Attention"]) == NotifyEnums.ALERT)
// WORKS on BOSS PC (wtf?) and works on my pc.
{
_needsAttention = true;
}
}

这是怎么回事,谁能详细说说?

编辑:

但是还有一点,Program Crahses之后,我点击Continue,又报错,再次点击continue,然后程序继续运行,就好像什么都没发生一样。它从动态对象中读取正确的值。

最佳答案

看起来您在 boss 机器上打开了第一次机会异常。在 Debug/Exceptions 下查看并取消选中 Thrown 列中的所有内容。当类没有直接实现成员时,expando 对象抛出异常是正常的,它使用异常来触发二次查找并返回正确的信息。

关于c# - 动态对象适用于一台 PC 但不适用于另一台 PC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12598552/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com