首页 新闻 会员 周边

C#4.0 遍历返回的匿名类型,为什么提示找不到匿名类型的属性了?

0
悬赏园豆:10 [已解决问题] 解决于 2013-02-21 20:15

例如有个方法

 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" 的定义,实际调试发现其实存在这个属性,并且有值

}
问题补充:

item是可以查看的.但是下面item.Name就提示错误了

乐楽樂的主页 乐楽樂 | 初学一级 | 园豆:183
提问于:2013-02-21 14:49
< >
分享
最佳答案
0

只要你返回的res没有问题 就不会这样,所以你要确定 a和b 在 DB 里面有

 

我这不会

收获园豆:10
Yu | 专家六级 |园豆:12980 | 2013-02-21 15:10

这个我能确定是有a和b的调试的时候能看见.所以很奇怪

乐楽樂 | 园豆:183 (初学一级) | 2013-02-21 16:10

@阿呆乐: 应该是在不同的程序集吧 ,如果同一个程序集是没有问题的

 

如果一定要在不同的程序集,则要在提供 GetList 的程序集中的 AssemblyInfo.cs 里,加入

[assembly:InternalsVisibleTo("另外一个程序集的名称")]

 

因为匿名类型一般只在同一程序集可见

如果不想加上InternalsVisibleTo,则不要返回匿名类型

Yu | 园豆:12980 (专家六级) | 2013-02-21 16:47

@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我打开怎么那么慢?
乐楽樂 | 园豆:183 (初学一级) | 2013-02-21 20:08

@阿呆乐: 我这测了 可以。不加的话,如你的报错,加上就不会

Yu | 园豆:12980 (专家六级) | 2013-02-21 21:39
其他回答(1)
0

测试了没有问题!如下图:

luofer | 园豆:468 (菜鸟二级) | 2013-02-21 16:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册