背景
- dynamic使用linq进行查找,运行正常;但是单测时报错 'object' does not contain a definition for 'xxxx' ;报未定义属性错误
原因
- 查资料发现:dynamic 匿名类的属性访问权限时internal,只有在同一个程序集内(Assembly)内才可以似乎用;
- 运行正常是因为调用者和被调用者在一个程序集(类库)内;可以正常使用
- 使用单测时调用者和被调用者不在同一个程序集内;(调用者是单测的类库)
解决方案
- 在被调用方的地方使用json序列化,再次反序列化成dynamic 类型
案例
var json = JsonConvert.SerializeObject(dynamicData, Formatting.Indented);
var newdynamicData = JsonConvert.DeserializeObject<List<dynamic>>(json);
//此处使用linq就不报未定义属性(SeriesX)问题了
var xName = newdynamicData .Select(p => p.SeriesX).Distinct().ToList();
网友评论