2012-04-04 56 views
0

我已成功爲幾個行代碼緊縮到這個使用嵌入式對象創建

For Each gal In galleries 
    With New HtmlGenericControl("div") 
       .ID = gal.Header 
       .Controls.Add(New HtmlImage() With {.Src = "http://p.com/pic.jpg"}) 

       galleryContent.Controls.Add(**Me**) 
    End With 
Next 

我無法找到任何地方如何引用回到我目前工作對象減少的.Net代碼添加控件回'galleryContent' - 使用普通me崩潰整個Web服務器... whooops。

使用不提供只使用.的較短的手 - 但它使用唯一的方法來做到這一點?我很奇怪地期待某種.Me或類似this

任何想法?

+1

[Can not](http://stackoverflow.com/questions/1152983/how-to-access-the-object-itself-in-with-end-with)。即使在類似的C#構造中,也不能。 – AakashM 2012-04-04 15:57:13

+2

不是試圖回答你的問題,但是如果你解決了這個問題,一個好的單元測試就是將它交給另一個開發人員,並要求他弄清楚它想做什麼。可讀性是國王,可調性是王座的繼承人。 – 2012-04-04 15:57:26

+0

這就是.NET-VB的美妙之處。只要它儘可能短,它就會變得可讀。在C#中這樣壓縮將是可怕的,但C#還有其他好處。 – ppumkin 2012-04-04 16:00:35

回答

5

你不能。至少不是那樣。

試試這個:

For Each gal In galleries 
    Dim obj as New HtmlGenericControl("div") 
    With obj 
     .ID = gal.Header 
     .Controls.Add(New HtmlImage() With {.Src = "http://p.com/pic.jpg"}) 

     galleryContent.Controls.Add(ojb) 
    End With 
Next 
+0

唉,這是我一個小時前寫的方法:-)但我想我可能會試着壓扁它,看看我能走多遠。但是在VB中嵌入匿名函數證明是不自然的。最好使用Linq最有可能?有一個例子嗎? :-) – ppumkin 2012-04-04 16:12:07

1

你可以這樣做:

For Each gal in galleries 
    galleryContent.Controls.Add(New HtmlGenericControl("div") With { .ID = gal.Header }) 
    galleryContent.Controls[galleryContent.Controls.Count - 1].Controls.Add(New HtmlImage() With {.Src = "http://p.com/pic.jpg"}) 
Next 

但這純粹是爲了還原線。它嚴重降低了可讀性,因此在任何正常情況下,您都不應該只是爲了減少代碼行數。可讀性比「生產線效率」重要得多。

+0

是有道理的..我需要包裝的匿名功能添加到頂級..難怪:)很好..現在測試! – ppumkin 2012-04-04 16:01:41

+0

它不起作用..因爲.Controls.Add不作爲HtmlGeneric控件的一個屬性存在,但是一個函數..如此無賴..而且是..它開始看起來很奇怪。 – ppumkin 2012-04-04 16:07:24

+0

好的,這是有道理的。當我寫出片段時,我並沒有真正想過。出於好奇,你的「galleryContent.Controls」是否有一個「AddRange」方法? – 2012-04-04 16:14:55

2

空軍終於人的是對的,但想想這....這會影響代碼的可讀性。

「代碼讀取更經常比被寫入的,所以相應的計劃」

我建議避免使用「與」在VB ...除非你真的是「必須」。

希望它有幫助。