将C#DynamicObject转换为任意类型

时间:2013-05-18 12:57:16

标签: c# dynamic casting

我正在尝试为c#中基于约定的配置绑定器编写一个不错的消费者API。 ConfigManager.GetSection(...)返回一个对象,所以我想返回一个动态对象,当转换为所需类型时会调用一个映射器。

在C#4 +中是否有任何方法可以创建一个动态类,可以在应用显式强制转换后处理调用?

e.g。

MyConfig config = (MyConfig)ConfigurationManager.GetSection("some/section");

在这种情况下,来自ConfigurationManager的动态对象将由强制转换器调用以执行一些配置魔术(我已经解决了这一点)

2 个答案:

答案 0 :(得分:2)

是的,DynamicObject有一个可覆盖的TryConvert。当DynamicObject子类被强制转换(或隐式转换为赋值)时,会调用TryConvert,并且在返回结果之前,您可以从binder参数获取有关调用的动态详细信息。

  

binder.Type   property提供对象必须转换的类型。对于   例如,对于C#中的语句(String)sampleObject   (Visual Basic中的CType(sampleObject,Type)),其中sampleObject是   从DynamicObject类派生的类的实例,   binder.Type返回String类型。 binder.Explicit属性   提供有关发生的转换类型的信息。它   对于显式转换返回true,对于隐式转换返回false   转换。

答案 1 :(得分:1)

有很多项目可以满足您的需求。

例如,查看AutoConfig