我正在尝试将匿名类强制转换为具有DuckTyping库(https://github.com/deftflux/DuckTyping)的接口。
public interface IStuff
{
string Foo { get; }
int Bar { get; }
}
var asd = new { Foo = "Hiho!" , Bar = 42};
var iAsd = DuckTyping.Cast<IStuff>(asd);
var foo = iAsd.Foo;
var bar = iAsd.Bar;
Library使用DynamicAssymbly和Reflection.Emit来动态生成实现接口的类。
不幸的是,这会导致MethodAccessException,因为匿名类是私有的,而DynamicAssembly中的类型不能访问私有成员(与DynamicMethod不同)。 见MSIL - how do you invoke a private method from MSIL?
我试过
这导致了一个InvalidOperationException:“Eine globale Methode oder ein globales Feld kann nicht von einem anderen Modul importiert werden。” (无法从其他模块导入全局方法或全局字段。)
我想要的是什么:
所以我的问题: