动态运行时对象创建:保持intellisense

本文关键字:保持 intellisense 创建 运行时 对象 动态 | 更新日期: 2023-09-27 18:24:54

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

现在,我可以确定新介绍的几个用途(和几个陷阱),但为了我的项目和这个问题,我正在考虑清理我的基于延迟绑定字符串的索引集合,使它们更安全。

所以,在动力学之前,我有:

Car car1 = CARWarehouse1["Honda"];

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

Car car1 = CARWarehouse1.Honda

这一切都很好,从一眼望去,我似乎已经实现了我想要的。。但我有吗?因为让我们面对现实吧,对于编译时的任何一个方法,如果我键入了错误的引用汽车类型,编译器都不会有问题,但我会在运行时遇到问题。

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

我知道有一些库,比如Moq,具有这种功能,Resharper在intellisense中提供了某种支持,但我正在寻找一个更全面的解决方案。

欢迎任何想法,无论大小,简单或复杂。

动态运行时对象创建:保持intellisense

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

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

如果编译时检查和intellisense很重要,则不要使用dynamic。如果对象的范围很小,您可以使用匿名类型,但我不认为这适用于您的情况。我建议你只定义你需要的类型,并坚持使用字典和哈希表来处理你在编码时无法预测的任何属性。