5

下面的代码抛出一个“MissingMemberException”

ScriptEngine engine = Python.CreateEngine();
ScriptRuntime runtime = engine.Runtime;
ScriptScope scope = runtime.CreateScope();

string code = "emp.Name==\"Bernie\"";

ScriptSource source =
  engine.CreateScriptSourceFromString(code, SourceCodeKind.Expression);

var emp = new {Name = "Bernie"};

scope.SetVariable("emp", emp);

var res = (double)source.Execute(scope);

如果我声明一个名为“Employee”的类型并给它一个成员“Name”,然后改用它:

var emp = new Employee {Name = "Bernie"}

它按预期工作。有谁知道为什么它不适用于匿名类型并且有解决方法吗?

4

1 回答 1

5

您的问题是匿名类型是内部的。当编译器生成匿名类型时,大概是这样的:

internal class <>f__AnonymousType0`1'<'<Name>j__TPar'> //or whatever silly name the compiler uses
{
    public string Name {get;set;}
}

您可以通过将具体类更改为内部来复制您遇到的错误:

internal class Employee
{
    public string Name { get; set; }
}

好的,这就是它发生的原因。你如何解决它?好吧,最好的方法是只使用您已经找到的公开的具体类。

于 2013-01-16T22:58:35.950 回答