当它可以是几种类型时,如何访问某个"对象"字段而不将其转换为一种类型?

use*_*322 2 c# casting object type-conversion

我有一个可以分配不同类的对象,所有这些类都有一个Position我需要访问的字段,而不管对象的类型如何.Visual Studio不会让我编译,var pos = myObject.Position因为object没有Position字段.我无法转换MyClass,因为可以有几个其他类分配给该变量.

如何在Position不转换为一种类型的情况下访问该字段?

Ree*_*sey 5

最好的选择是让所有类实现一个公共接口,然后使用该接口访问属性.

但是,如果这些是您无法控制的类,则还有其他选项.您可以使用Reflection来访问字段/属性(通过Type.GetFieldFieldInfo.GetValue等),尽管这在运行时很慢.

如果您使用的是C#4或更高版本,则可以使用dynamic:

dynamic theObject = yourObject;
Point position = theObject.Position;
Run Code Online (Sandbox Code Playgroud)

这将使用动态(运行时)绑定来查找类型的Position属性或字段.