下面的代码效果很好。如果Get
and Use
方法位于不同的程序集中,代码失败并出现 RuntimeBinderException。这是因为.Net运行时系统只保证匿名类型的通用性(<string, int>
在本例中)在程序集中。
有什么办法可以欺骗运行时系统来克服这个问题吗?我可以检查调试器中的对象Use
侧,调试器可以看到相关属性。
class Program
{
static void Main(string[] args)
{
UsePerson();
Console.ReadLine();
}
public static void UsePerson()
{
var person = GetPerson();
Console.WriteLine(person.Name);
}
public static dynamic GetPerson()
{
return new { Name = "Foo", Age = 30 };
}
}
Use an 扩展对象而不是匿名类型。这应该允许您安全地跨越程序集边界:
public static dynamic GetPerson()
{
dynamic person = new ExpandoObject();
person.Name = "Foo";
person.Age = 30;
return person;
}
一般来说,匿名类型实际上应该只在生成它们的同一方法中使用。一般来说,从方法返回匿名类型会导致比它解决的问题更多的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)