0

我使用了动态类型,这是 .NET 4.0 中的一种新类型。

我想使用动态类型,因为我想使用一些事先我不知道类型是什么的类型,但我知道所有这些可能的类型都有一些常用的方法。

就我而言,我在实体框架 4.0 中使用自我跟踪实体,并且我知道所有实体都具有标记为XXX的方法(用于设置实体的状态)。

通过我创建的动态对象,我可以访问和设置其中一个实体的属性,但是当我尝试执行 MarkedAsXXX 方法时,我得到一个异常,指出该对象尚未定义该方法。

我想知道如何访问这些方法。是否可以?

因为我有一个可以访问原始值并将此值设置为当前值的函数,但是我需要将实体设置为 Unchenged。

谢谢。

4

2 回答 2

2

我想使用动态类型,因为我想使用一些事先我不知道类型是什么的类型,但我知道所有这些可能的类型都有一些常用的方法。

这表明您应该使用这些常用方法创建一个接口,并使所有相关类型都实现该接口。

通过我创建的动态对象,我可以访问和设置其中一个实体的属性,但是当我尝试执行 MarkedAsXXX 方法时,我得到一个异常,指出该对象尚未定义该方法。

这可能是由于显式接口实现。如果这些类型以正常方式将这些方法声明为公共方法,那应该没问题。

如果您真的想对这些类型使用动态类型,是否有一些声明 MarkedAsXXX 方法的基本接口,您可以在调用这些方法之前将对象转换为这些方法?(我对实体框架不熟悉,所以不知道那些方法的细节。)

基本上,我会尽量避免动态类型,除非你真的需要它,部分原因是像这样的边缘情况——但如果显式接口实现原因,那么转换到该接口应该没问题。

于 2012-08-18T18:22:40.903 回答
0

如果您为动态生成的类定义一个接口,您可以调用这些方法而无需反射调用的麻烦。

于 2012-08-18T18:15:31.167 回答