如何修复动态对象的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;
}
但是我不明白为什么会出现这个异常以及如何修复它
强制转换动态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());