我的C#应用使用CSharpCodeProvider.CompileAssemblyFromSource
在C#上编译小型脚本。
我需要一种在脚本中设置许多主代码字段的方法。
我需要在两个地方都能看到的东西。
我在脚本和主要代码中声明了测试类,如下所示:
namespace MainNS
{
public class TestClass
{
public string asd;
public int dsa;
}
}
我的脚本如下:
using System;
using System.Reflection;
using System.Collections.Generic;
namespace ScriptedNS
{
public class TestClass
{
public string asd;
public int dsa;
}
public class ScriptTaskInfo
{
private TestClass GlobalTC;
public void Initialize(object global_tc)
{
this.GlobalTC = (TestClass)global_tc; //of course invalid cast here
this.GlobalTC.asd = "string set from script that should be visible in main code";
}
public void Execute()
{
//do something with this.GlobalTC
}
}
}
当我在主代码中创建TestClass
实例并尝试用其Initialize
脚本对象时,我得到了无效的强制转换异常。
如何实现相同的对象对于脚本和主代码都是可见的,我可以将其设置为正常的字段,而不仅仅是具有Dictionary<string, object>
映射并始终从对象转换为不同类型。
答案 0 :(得分:0)
您可以使用(dynamic global_tc)代替(object global_tc)
public class ScriptTaskInfo
{
private TestClass GlobalTC;
public void Initialize(dynamic global_tc)
{
this.GlobalTC = global_tc;
this.GlobalTC.asd = "string set from script that should be visible in main code";
}
public void Execute()
{
//do something with this.GlobalTC
}
}