You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在With语句中引用对象并添加至List?无需显式指定变量

在VB.NET的With语句中引用当前对象并添加到List的方案

很遗憾,VB.NET的With语句里并没有内置的方式来隐式引用当前正在操作的目标对象——没办法用你设想的[this label object]这种语法来省略变量名。不过我们有几种更简洁的替代方案,能帮你避免大量重复手动添加的麻烦:

1. 创建对象时直接添加到List(最简洁)

如果后续不需要单独引用这个控件变量,可以直接在创建对象的同时把它加入List,连中间变量都能省:

Dim myList As New List(Of Object)

' 直接创建+设置属性+加入List一步完成
myList.Add(New Label With {
    .Top = 50,
    .Left = 100,
    .Text = "Something"
})

' 同时添加到Panel也可以合并进去
Panel1.Controls.Add(myList(myList.Count - 1))

如果需要保留变量(比如后续要修改控件),也可以在创建后立刻添加,不用单独写一行:

Dim label1 As New Label With {
    .Top = 50,
    .Left = 100,
    .Text = "Something"
}
myList.Add(label1)
Panel1.Controls.Add(label1)

2. 循环批量创建时合并操作

既然你提到有大量对象需要循环处理,这种场景下可以把创建控件、设置属性、添加到List、添加到Panel全部放在循环体内,代码会非常整洁:

Dim myList As New List(Of Object)
Dim panel As New Panel()

' 比如批量创建10个标签
For i As Integer = 0 To 9
    Dim newLabel As New Label With {
        .Top = 50 + i * 35, ' 垂直间隔排列
        .Left = 100,
        .Text = $"标签 {i + 1}"
    }
    myList.Add(newLabel)
    panel.Controls.Add(newLabel)
Next

3. 用With语句时的妥协方案

如果你一定要保留With语句来设置大量属性,那还是得显式写出变量名,但至少可以把Add操作放在With块里,不用单独拆成一行:

Dim myList As New List(Of Object)
Dim label1 As New Label

With label1
    .Top = 50
    .Left = 100
    .Text = "Something"
    .Font = New Font("Arial", 12, FontStyle.Bold)
    ' 这里还是得显式写label1,但至少不用单独开一行
    myList.Add(label1)
    Panel1.Controls.Add(label1)
End With

为什么没有隐式引用?

VB.NET的With语句设计初衷只是简化对对象属性和方法的调用,并没有提供一个类似C#this的隐式变量来指代目标对象,所以必须显式引用原来的变量名才能把它加入集合。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:32:07