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; }
}

わかりました、それがそれが起こっている理由です。どのように修正しますか?最善の方法は、すでに見つけたように public な具象クラスを使用することです。

于 2013-01-16T22:58:35.950 に答える