如何修复动态对象的InvalidCastException

本文关键字:InvalidCastException 对象 动态 何修复 | 更新日期: 2023-09-27 18:04:44

ScriptEngine rubyEngine;
//...
dynamic execution_result = rubyEngine.Execute(script, scope);
if (execution_result != null && !silent)
    WriteResponce(execution_result.ToString());

此代码生成InvalidCastException:

无法强制转换类型为"SOMELIB"的对象。图形到类型"SOMELIB.Object"。

发生比较时:

execution_result != null

如果删除此比较,则execution_result.ToString()抛出相同的异常。

我已经找到了一个解决方案:

if (execution_result is SOMELIB.Graphics)
{
    SOMELIB.Graphics g = execution_result as SOMELIB.Graphics;
    WriteResponce(g.ToString());
    return;
}

但是我不明白为什么会出现这个异常以及如何修复它

如何修复动态对象的InvalidCastException

强制转换动态to对象以避免DLR(动态语言运行库)尝试将ToString方法绑定到它的(真正的)动态类类型。

ScriptEngine rubyEngine;
//...
dynamic execution_result = rubyEngine.Execute(script, scope);
object result = execution_result as object;
if (result != null && !silent)
    WriteResponce(result.ToString());
相关文章:
  • 没有找到相关文章