vb.net中的简化列表初始化

Meg*_*ez7 3 vb.net list

有什么方法可以简化List初始化以消除重复New MyObject() With以及类似的参数名称Value1?我需要创建包含50个对象的列表,因此需要重复很多,可能是不必要的代码。

我使用最新的Visual Studio 2019(16.2.3)。

Public Class MyObject
    Public Property Value1 As Int32
    Public Property Value2 As Int32
End Class

Dim Test As New List(Of MyObject) From {
    New MyObject() With {.Value1 = 1, .Value2 = 1},
    New MyObject() With {.Value1 = 2, .Value2 = 2},
    New MyObject() With {.Value1 = 3, .Value2 = 3}
}
Run Code Online (Sandbox Code Playgroud)

S.S*_*han 5

以下代码显示如何将扩展方法添加到泛型List类型,以便可以使用集合初始化程序添加类型T的对象。通过扩展方法,您可以使用缩短的集合初始化程序语法:

Imports System.Runtime.CompilerServices

Module MyExtensions_List

<Extension()>
Sub Add(ByVal list As List(Of MyObject), ByVal v1 As Integer, ByVal v2 As Integer)
    list.Add(New MyObject With {.Value1 = v1, .Value2 = v2})
End Sub

End Module
Run Code Online (Sandbox Code Playgroud)

现在,您可以简单地将其用作:

Dim list1 = New List(Of MyObject) From { {1, 10}, {2, 20}, {3, 30} }
Run Code Online (Sandbox Code Playgroud)

注意:Add方法可以是如图所示的扩展方法,也可以将其显式定义为要使用的类的普通公共方法(MyObject此处)!

参考:collection-initializers如何:创建Collection Initializer使用的添加扩展方法