2012-04-04 59 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 ...除非你真的是“必须”。

希望它有帮助。