VB.NET嵌套来自不同范围的语句

时间:2011-07-11 21:20:06

标签: vb.net data-structures nested with-statement

我想知道这是否可行。我有一个列表(lstTable),它与我试图填写来自公共结构(ELEM_DATA)的信息的形式相同。我理解嵌套语句如果在同一范围内,它将起作用,但我怎么能用下面的例2做到这一点:

示例1:

With me.lstTable.Items(RECORD)
     .SubItems(1).text = ELEM_DATA(RECORD).name
     .SubItems(2).text = ELEM_DATA(RECORD).number
end with

示例2:

With me.lstTable.Items(RECORD)
     With ELEM_DATA(RECORD)
     .SubItems(1).text = .name
     .SubItems(2).text = .number
     end with
end with

我不知道它是否可能,或者它是否就像将(.name)更改为其他内容一样简单。

2 个答案:

答案 0 :(得分:2)

嵌套With语句有效(请参阅有关冲突的评论)。不幸的是你不能使用内部的外部成员。但是,由于你的外部WITH是一个引用类型,你可以使用局部变量按照你在评论中的建议对其进行“别名”。

Dim l = me.lstTable.Items(RECORD) ' requires 2008 and option infer
With ELEM_DATA(RECORD)
   l.SubItems(1).text = .name
End With

这是一个链接,显示如何使用嵌套的WITH语句。

http://ideone.com/agjne

答案 1 :(得分:0)

'EXAMPLE:

With New Object() {1, 2} 'With block 1
     Dim debug_1 As Object = .ToArray(0) 'Value 1 from object of block 1
         With New Object() {3, 4}  'With block 2
                 Dim debug_2 As Object = .ToArray(0)  'Value 3 from block 2
                 'How get 2 from block 1 of Object() {1, 2}?
                 '>>>
         End With
End With
'SOLUTION
With New Object() {1, 2}    
     With New Object() {3, 4}.Concat(.ToArray)
          Dim debug_3 As Object = .ToArray(3)  'got value 2 from outer WITH block 1 [Object() {1, 2}]
          '---//---//---
     End With
     '---//---//---
End With