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

C# 动态运行时对象创建:保持intellisense?,c#,dynamic,intellisense,C#,Dynamic,Intellisense,最近,我一直在探索如何使用C#4.0中引入的新奇的动态关键字(DynamicObject、ExpandoObject等) 现在,我可以确定新引入的几个用途(和几个陷阱),但出于我的项目目的,对于这个问题,我正在研究清理基于字符串的后期绑定索引集合,以使它们更安全 所以,在我之前: Car car1 = CARWarehouse1["Honda"]; 我现在可以使用dynamics(CARWarehouse1现在扩展了DynamicObjects基础) 这一切都很好,从一个快速的一瞥看,似乎我已

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

现在,我可以确定新引入的几个用途(和几个陷阱),但出于我的项目目的,对于这个问题,我正在研究清理基于字符串的后期绑定索引集合,以使它们更安全

所以,在我之前:

Car car1 = CARWarehouse1["Honda"];
我现在可以使用dynamics(CARWarehouse1现在扩展了DynamicObjects基础)

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

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

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


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

不,对于动态类型没有这样的事情


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

不,动态类型没有这种情况


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

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

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

您的CARWarehouse1(奇数大写btw)在编译时是否知道它有一个
Honda
,但没有
Honder
?如果没有,编译器如何投诉?如果是这样的话,为什么不使用静态类型?是的,这个项目实际上没有使用CARWarehouse1,这只是一个例子,汽车将在运行时通过数据库或xml或其他方式添加到CarWarehouse,我不希望汽车是强类型的。我明白你的意思,但我希望intellisense能够以某种方式实际运行该方法并返回动态属性。我很乐意研究代码生成路线,比如linq实体。我只是想知道它可能会在哪个数据库中查找?你的作品是什么?测验还有别的吗?在编译时是否确实需要数据库调用?如果你不是在一个有数据库的网络上。。。想想这里可能出现的所有问题……F#3.0类型提供程序可以执行类似的操作。但我不认为C#中存在类似的东西。您的CARWarehouse1(奇数大写btw)在编译时是否知道它有一个
Honda
,但没有一个
Hondar
?如果没有,编译器如何投诉?如果是这样的话,为什么不使用静态类型?是的,这个项目实际上没有使用CARWarehouse1,这只是一个例子,汽车将在运行时通过数据库或xml或其他方式添加到CarWarehouse,我不希望汽车是强类型的。我明白你的意思,但我希望intellisense能够以某种方式实际运行该方法并返回动态属性。我很乐意研究代码生成路线,比如linq实体。我只是想知道它可能会在哪个数据库中查找?你的作品是什么?测验还有别的吗?在编译时是否确实需要数据库调用?如果你不是在一个有数据库的网络上。。。想想这里可能出现的所有问题……F#3.0类型提供程序可以执行类似的操作。但我认为C#中不存在这样的东西。遗憾的是,他们应该考虑支持注释之类的东西来告诉intellisense。。。。PHP也做了类似的事情……遗憾的是,的确如此,他们应该考虑支持注释之类的东西来告诉intellisense。。。。PHP做了类似的事情。。。
Car car1 = CARWarehouse1.Honda