例如有个方法
public static dynamic GetList() { var res= from i in DB select new { i.a,i.b}; return res; }
调用的时候
var list=O.GetList(); foreach (dynamic item in list) { Type type = item.GetType(); string a = type.GetProperty("a").GetValue(item,null); //上面这样写没问题 var p=item.a;//这里提示“object”未包含"a" 的定义,实际调试发现其实存在这个属性,并且有值 }
只要你返回的res没有问题 就不会这样,所以你要确定 a和b 在 DB 里面有
我这不会
这个我能确定是有a和b的调试的时候能看见.所以很奇怪
@阿呆乐: 应该是在不同的程序集吧 ,如果同一个程序集是没有问题的
如果一定要在不同的程序集,则要在提供 GetList 的程序集中的 AssemblyInfo.cs 里,加入
[assembly:InternalsVisibleTo("另外一个程序集的名称")]
因为匿名类型一般只在同一程序集可见
如果不想加上InternalsVisibleTo,则不要返回匿名类型
@Yu: 非常感谢你的回复。不过我测试了一下。似乎不在同一个程序集中加上
InternalsVisibleTo也不行。
后来翻出来篇这个文章:http://www.cnblogs.com/Ivony/archive/2010/05/21/1740546.html
然后看了看老赵的解决办法:http://blog.zhaojie.me/2010/05/asp-net-mvc-dynamic-view-model-binding-error-with-anonymous-types.html
在此感谢Ivony,老赵。
还有,老赵的blog我打开怎么那么慢?
@阿呆乐: 我这测了 可以。不加的话,如你的报错,加上就不会
测试了没有问题!如下图: