2011-07-25 25 views
3

假設我們有一個匿名類型的實例:有沒有簡潔的方式來裝飾一個匿名類型?

var b = new { 
    Length = 5 
    , Width = 6 
    // 40 more properties 
}; 

,我們希望創建一個不同的匿名類型,它具有所有的相同的部件,第一類型的實例,以作爲第一個相同的值例如,而是一個其他成員:

var d = new { 
    b.Length 
    , b.Width 
    // the same 40 more properties, with values from b 
    , Jiffle = "custard" 
}; 

這是很好的編譯器它將自動計算出什麼我們要調用d的類型的成員,剛剛從這個初始化。但是,有什麼辦法可以避免必須明確提及我們想複製的所有42個成員?

+7

我不認爲有一個簡單的方法,它肯定像是濫用匿名類型。如果你需要那麼多的字段和類型之間的很多共同性,只需要自己聲明類型。如果您希望動態添加這些字段,ExpandoObject(http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject.aspx)*可能會有所幫助。 – dlev

+0

雖然我同意@dlev,但解決方法是簡單地執行此操作:'var d = new {b,Jiffle =「xyz」};' –

+1

http://stackoverflow.com/questions/478013/how-do- i-create-and-access-a-anonymous-class-passed-as-a-param/478030#478030 –

回答

0

dlev's comment伸到一個答案,所以我可以接受它:

我不認爲有一個簡單的方法,它肯定似乎是一個 濫用匿名類型。如果你需要那麼多的字段和類型之間的共同點,只需要自己聲明類型。如果您想要動態添加這些字段的 ,ExpandoObject可能會幫助 。

3

這聽起來像你需要一個具有繼承模式的良好定義的類型。

上面你說的是d是b。將延長或:

class b 
{ 
    Length = 5 
    , Width = 6 
    // 40 more properties 
} 

class d : b 
{ 
    Jiffle = "custard" 
} 
0

組成?

var d = new { B = b, Jiffle = "custard" } 

d.B.Length; 
+0

對不起@Daniel Hilgarth,在我發佈這個之前沒有看到你的評論。 – tvanfosson

+0

沒問題。我沒有覺得它值得回答,所以我只是將它作爲評論發佈。 –

+0

@Daniel Hilgarth。哎,這讓我感覺好多了。 :-) – tvanfosson

相關問題