访问ExpandoObject的in属性触发CS1001错误,求解决方案
解决ExpandoObject中访问名为
in的属性时的关键字冲突问题 没错,问题根源就是in是C#的保留关键字,编译器会把point.in里的in当成关键字解析,而非属性名,因此触发语法错误。下面是两种不用修改属性名就能解决的办法:
方法一:使用索引器访问
ExpandoObject实现了IDictionary<string, object>接口,我们可以把动态对象强转为这个接口,通过键名来访问属性:
foreach (dynamic? point in points) { var pointDict = point as IDictionary<string, object>; PointModel model = new PointModel { InPoint = pointDict["in"], Duration = point.duration, PointType = point.type }; // other code here. }
方法二:使用逐字标识符
在关键字前加上@符号,强制编译器将其视为普通标识符,这种方式代码改动最小:
foreach (dynamic? point in points) { PointModel model = new PointModel { InPoint = point.@in, Duration = point.duration, PointType = point.type }; // other code here. }
如果只是单个属性的访问,方法二更简洁直观;如果需要批量处理属性或者不确定属性名,方法一的灵活性更高。
内容的提问来源于stack exchange,提问作者kickinchicken
相关产品推荐
相关产品推荐

