C#中的动态Type对象数组

时间:2016-05-11 18:56:44

标签: c# dynamic dapper

简短形式:我的问题类似于其他stackoverflow答案,除了我需要'动态'类型而不是字符串等

Dynamically create an array of Type in C#

基本上,我正在使用Dapper运行查询,Dapper支持最多7个对象的对象映射 - 我需要8个。

当做7时,它看起来像:

connection.Query<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>(sql, (obj1, obj2, obj3, obj4, obj5, obj6, obj7) => {...});

当做8时应该是:

connection.Query<dynamic>(sql, Type[], (objArray) => {...});

其中Type []是一个类型数组 - 在本例中是8种动态类型。

我已尝试过各种各样的事情

var types = new Type[]{
    dynamic,
    dynamic,
    dynamic,
    dynamic,
    dynamic,
    dynamic,
    dynamic,
    dynamic
}

var types = new Type[]{
    Type.GetType("System.Dynamic.DynamicObject"),
    Type.GetType("System.Dynamic.DynamicObject"),
    Type.GetType("System.Dynamic.DynamicObject"),
    Type.GetType("System.Dynamic.DynamicObject"),
    Type.GetType("System.Dynamic.DynamicObject"),
    Type.GetType("System.Dynamic.DynamicObject"),
    Type.GetType("System.Dynamic.DynamicObject"),
    Type.GetType("System.Dynamic.DynamicObject")
}

以及其他各种各样的人。这些都不起作用。

我在想,因为'动态'是缺少一种类型,也许我正在接近这个有点错误?

无论如何,有什么想法吗?

1 个答案:

答案 0 :(得分:1)

  

<强> C# Reference: dynamic

     

在大多数情况下,类型dynamic的行为类似于object类型。但是,包含类型dynamic的表达式的操作未由编译器解析或进行类型检查。编译器将有关操作的信息打包在一起,该信息稍后用于评估运行时的操作。作为流程的一部分,动态类型的变量将编译为object 类型的变量。因此,类型dynamic仅在编译时存在,而不是在运行时。

所以你应该通过这个:

var types = Enumerable.Repeat(typeof(object), 8).ToArray();