如何在With ... Block中使用New Object的实例

时间:2014-06-26 02:27:31

标签: vb.net

Dim objects As New List(Of Object)
With New Object
   .prop1 = "Property 1"
   .prop2 = "Property 2"
    objects.add(.instance) 'i mean instance of New Object
End With

是否可能。

我问新问题,因为上一个问题有误导信息,我没有给出正确答案。所以这里的代码。

2 个答案:

答案 0 :(得分:2)

不,不可能。 With语句基本上创建了一个隐式变量。您对该变量所能做的只是访问成员,并且没有成员返回对象本身的引用。

如果您想要简洁的代码来创建,填充对象并将其添加到列表中,请执行以下操作:

myList.Add(New SomeType With {.SomeProperty = someValue,
                              .SomeOtherProperty = someOtherValue})

有趣的是,如果您创建自己的扩展方法,您可以按照自己的方式工作。我的印象是你无法扩展Object类但是我错了或者已经改变了,因为我刚刚在VB 2013中尝试过并且它有效。您可以编写如下方法:

Imports System.Runtime.CompilerServices

Public Module ObjectExtensions

    <Extension>
    Public Function Self(Of T)(source As T) As T
        Return source
    End Function

End Module

然后做这样的事情:

With New SomeType
    .SomeProperty = someValue
    .SomeOtherProperty = someOtherValue
    myList.Add(.Self())
End With

我不确定这确实提供了任何好处,因为我首先演示了对象初始化语法的可用性。

嗯......我刚刚意识到那并没有实际扩展Object类。这是我尝试这样做的初衷,但后来我意识到通用方法更好,因为它会返回与你调用它相同的类型。我只是使用扩展类型为Object的非泛型方法对其进行测试,但它确实仍然有效。

答案 1 :(得分:0)

你应该创建自己的类例如:

Public Class Car
Private _NumberCar As Integer
Public Property NumberCar() As Integer
    Get
        Return _NumberCar
    End Get
    Set(ByVal value As Integer)
        _NumberCar = value
    End Set
End Property


Private _ColorCar As Color
Public Property ColorCar() As Color
    Get
        Return _ColorCar
    End Get
    Set(ByVal value As Color)
        _ColorCar = value
    End Set
End Property


Private _OwnerName As String
Public Property OwnerName() As String
    Get
        Return _OwnerName
    End Get
    Set(ByVal value As String)
        _OwnerName = value
    End Set
End Property
End Class

并且在要添加汽车对象的类中执行以下操作:

    Dim CarList As New List(Of Car)
    Dim item As New Car
    With item
        .NumberCar = 1243
        .ColorCar = Color.Red
        .OwnerName = "Ibra"
    End With
    CarList.Add(item)

强文