gpt4 book ai didi

c# - 通过对象进行转换时不会调用 TryConvert

转载 作者:太空宇宙 更新时间:2023-11-03 21:44:51 27 4
gpt4 key购买 nike

我有一个 DynamicObject,它带有一个已实现的 TryConvert 方法。以下代码运行良好:

dynamic d = GetMyDynamic();
int i = (int)d; // TryConvert is called and returns the proper int value

但是,当 d 被转换为对象时,转换在运行时失败:

object o = d;
int i = (int)o; // TryConvert is not called. InvalidCastException thrown

当然,(int)(dynamic)o 确实如预期的那样工作。

这是为什么呢?有没有办法解决这个问题,以便 (int)o 调用 TryConvert

最佳答案

原因实际上很简单:如果您不使用 dynamic 关键字,则不会使用动态语言运行时 (DLR)。但是动态语言运行时调用 TryConvert 方法。

如果没有 DLR,o 只是一个类型为 MyDynamicObject 的对象,您正试图将其转换为 int。这失败了,因为 MyDynamicObject 不是 int

关于c# - 通过对象进行转换时不会调用 TryConvert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17571584/

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