如何修复动态对象的InvalidCastException?

时间:2011-08-08 15:01:42

标签: c# dynamic ironruby .net

ScriptEngine rubyEngine;
//...
dynamic execution_result = rubyEngine.Execute(script, scope);

if (execution_result != null && !silent)
    WriteResponce(execution_result.ToString());

此代码生成 InvalidCastException

  

无法将“SOMELIB.Graphics”类型的对象强制转换为类型   '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;
}

但我不明白为什么会出现此异常以及如何解决此问题。

1 个答案:

答案 0 :(得分:0)

将动态转换为对象以避免DLR(动态语言运行时)尝试将ToString方法绑定到其(实际)动态类类型。

ScriptEngine rubyEngine;
//...
dynamic execution_result = rubyEngine.Execute(script, scope);

object result = execution_result as object;
if (result != null && !silent)
    WriteResponce(result.ToString());