有没有办法按名称调用方法并指定参数而不使用动态? (C#)
更新
` 公共课程 { public static void Main(string [] args) { ScriptEngine engine = Python.CreateEngine(); ScriptScope scope = engine.CreateScope();
engine.ExecuteFile("script.py", scope);
dynamic calculator = scope.GetVariable("Calculator");
dynamic calculatorInstance = engine.Operations.CreateInstance(calculator);
dynamic result = engine.Operations.InvokeMember(calculatorInstance, "sample");
Console.ReadKey();
}
}
`
class Calculator:
def sample(self):
return 'test'
效果很好
答案 0 :(得分:2)
您可以使用ObjectOperations
类来执行动态操作,您可以从ScriptEngine
实例获取它的实例:
ScriptEngine engine = ...;
object result = engine.Operations.InvokeMember(o, "foo", 1, 2, "3");
答案 1 :(得分:0)
Open Source Impromptu-Interface(可以在nuget中找到)有很多方法可以在任何动态对象,python,ruby,c#等上执行reflection-like invocation,因为它使用了dlr c#binder代码。 / p>
Impromptu.InvokeMember(o, "foo", 1, 2, "3")
但在这种情况下,JeffHardy的答案是最好的,因为你已经在使用脚本引擎了。