2016-05-11 121 views
0

縮寫:我的問題是類似這樣的其他計算器的答案,但我需要的「動態」,而不是字符串等陣列的動態類型的對象

Dynamically create an array of Type in C#

基本上,我的類型m跑使用小巧玲瓏的一個查詢,它支持對象映射到7個對象 - 我需要8.

當進行7,它看起來像:

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

當DOI ng 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") 
} 

及各種其他。沒有一個可行。

我在思考,因爲'動態'相當於沒有一個類型,也許我接近這個有點錯誤?

無論如何,有什麼想法?

+3

不要那樣做。你想解決什麼問題? – SLaks

+0

從哪兒來'IDbConnection.Query'?這必須是擴展方法,因爲[接口](https://msdn.microsoft.com/library/system.data.idbconnection)沒有定義這種方法,而是從哪裏來的?你使用什麼技術?或者是你想要寫*這種方法的問題? –

+0

'dynamic'不是一種類型 - 只是意味着任何綁定都將在運行時根據對象的_actual_類型完成。你可以添加更多關於你想要做的事情嗎? –

回答

1

C# Reference: dynamic

類型dynamic行爲就像在大多數情況下object型。但是,包含類型爲dynamic的表達式的操作未被編譯器解析或類型檢查。編譯器將有關該操作的信息打包在一起,並且該信息稍後用於在運行時評估操作。作爲該過程的一部分,動態類型的變量被編譯爲類型爲object的變量。因此,類型dynamic僅在編譯時存在,而不是在運行時存在。

所以,你應該只是通過這樣的:

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