最近我一直在探索使用C#4.0中引入的新的动态关键字(DynamicObject,ExpandoObject等)。
现在我可以为新的介绍确定一些用途(以及一些陷阱),但是出于我的项目和这个问题的目的 - 我正在研究清理我的后期基于字符串的索引集合来制作它们更安全。
所以,在我有动力之前:
Car car1 = CARWarehouse1["Honda"];
我现在可以做动态(CARWarehouse1现在扩展了DynamicObjects基础)
Car car1 = CARWarehouse1.Honda
这一切都很好,从快速的一瞥看起来我已经实现了我想要的......但是我呢? 因为让我们面对它,对于编译时的任何一种方法,如果我输错了我引用的汽车类型,编译器就不会有问题,但我会在运行时遇到问题。
因此,我真正需要的是编译时属性检查和Intellisense支持。那么 - 我能做到吗?
我知道像Moq这样的库有这种功能,而Resharper在intellisense中提供了某种支持,但我正在寻找更全面的解决方案。
欢迎任何想法,大,小,容易或复杂。
答案 0 :(得分:4)
不,对于动态类型没有这样的东西。
基本上,编译器会跳过对标记为dynamic
的变量的所有检查,因为无法检查任何内容。动态对象上的属性可能在运行时创建,因此在编译时无法检查代码的准确性。
答案 1 :(得分:1)
如果编译时间检查和智能感知很重要,请不要使用dynamic
。如果对象的范围非常小,您可以使用匿名类型,但我不会得到适用于您的情况的印象。我建议您只定义所需的类型,并坚持使用字典和哈希表来处理编码时无法预测的任何属性。