2011-10-13 27 views
1

這可能是一個愚蠢的問題,但我很想知道是否有辦法做到這一點。結合動態類型

爲了簡化導入大量空間分隔文件的過程,我想出了一個簡單的方案來描述動態類型的佈局,並將其引發到調用委託的分析器。

佈局看起來喜歡這樣的:

var layout = new 
{ 
    Code = new SDFColumn() { Start = 0, Length = 20 }, 
    Name = new SDFColumn() { Start = 20, Length = 3 } 
    // etc 
}; 

所有的偉大工程。我現在處於一種情況,我有兩個非常大的SDF進口,其結構是85%相同的,最終會阻止一些差異。

是否有辦法追加彼此的佈局,如:

var layoutCommon = new 
{ 
    /* Common fields */ 
}; 

var layoutFile01 = new 
{ 
    /* Changes for first file type */ 
}; 

var layoutFile02 = new 
{ 
    /* Changes for the second file type */ 
}; 


var finalLayout = /* ??? */; 

有一件事,我意識到是行不通的,是:

var completeLayout = { }; 

if(file01) 
    completeLayout = { /* everything */ }; 
else 
    completeLayout = { /* everything */ }; 

這不起作用,很明顯,因爲所有3種類型都有根本的不同。

任何想法,將不勝感激:)

+0

如何使用繼承?將所有常用字段放在基類中,並在派生類 –

+0

@dano_ramos中指定特定字段,我意識到可以爲每個佈局創建一個類,但是想法是爲了避免這樣做,只需定義佈局的簡單性即可在我需要的功能範圍內,因此我沿着這條路線前進。 –

+0

的確聽起來更靈活。現在,你讓我感興趣 –

回答

3

您是否嘗試過使用dynamic代替var?這應該延遲鍵入直到運行時,所以你的潛在對象不必匹配。 var只是任何靜態類型的替代品;它根本不是動態的。

+0

+1,謝謝。我實際上在解析器中使用了'dynamic'來允許佈局通過反射來傳遞和詢問。我失去了intellisense的優勢,但佈局正好在我面前。但是,這絕對解決了這個問題,謝謝! –

+0

是的,缺乏智能感覺絕對是一件可悲的事情,但現在不可避免。我實際上做了很多這樣的事情來處理一個通用的CSV結構,所以很高興看到其他人有相同的想法! – drharris