动态运行时对象创建:保持智能感知?

时间:2012-02-16 11:27:29

标签: c# dynamic intellisense

最近我一直在探索使用C#4.0中引入的新的动态关键字(DynamicObject,ExpandoObject等)。

现在我可以为新的介绍确定一些用途(以及一些陷阱),但是出于我的项目和这个问题的目的 - 我正在研究清理我的后期基于字符串的索引集合来制作它们更安全。

所以,在我有动力之前:

Car car1 = CARWarehouse1["Honda"];

我现在可以做动态(CARWarehouse1现在扩展了DynamicObjects基础)

Car car1 = CARWarehouse1.Honda

这一切都很好,从快速的一瞥看起来我已经实现了我想要的......但是我呢? 因为让我们面对它,对于编译时的任何一种方法,如果我输错了我引用的汽车类型,编译器就不会有问题,但我会在运行时遇到问题。

因此,我真正需要的是编译时属性检查和Intellisense支持。那么 - 我能做到吗?

我知道像Moq这样的库有这种功能,而Resharper在intellisense中提供了某种支持,但我正在寻找更全面的解决方案。

欢迎任何想法,大,小,容易或复杂。

2 个答案:

答案 0 :(得分:4)

不,对于动态类型没有这样的东西。

基本上,编译器会跳过对标记为dynamic的变量的所有检查,因为无法检查任何内容。动态对象上的属性可能在运行时创建,因此在编译时无法检查代码的准确性。

答案 1 :(得分:1)

如果编译时间检查和智能感知很重要,请不要使用dynamic。如果对象的范围非常小,您可以使用匿名类型,但我不会得到适用于您的情况的印象。我建议您只定义所需的类型,并坚持使用字典和哈希表来处理编码时无法预测的任何属性。