有什么方法可以简化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)
以下代码显示如何将扩展方法添加到泛型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使用的添加扩展方法