假設我有下面的類聲明中的參數的構造:VB.NET:使用迭代器,ObjArray.Select(功能(a)中a.Property),以驅動一個創建不同的對象陣列
Public Class MyObjectR
Private mStr As String
Public Sub New(ByVal _Var1 As String)
mStr = _Var1
End Sub
Public Property MyProperty As String
Get
Return mStr
End Get
Set(value As String)
mStr = value
End Set
End Property
Public Shared Widening Operator CType(ByVal _Initializer As String) As MyObjectR
Return New MyObjectR(_Initializer)
End Operator
End Class
餘可使用便利地加寬操作者實現非常可讀初始化初始化的這些陣列,在這種情況下:
Dim u As MyObjectR() = New MyObjectR() {"a", "b", "c", "d"}
在這一點上,我有MyObjectR的陣列。
假設我現在下面的類聲明添加到我的範圍:
Public Class MyObjectS
Private mStr As String
Public Sub New(ByVal _Var1 As String)
mStr = _Var1
End Sub
End Class
現在,我想創建和初始化用相同數量MyObjectS的新數組在我之前MyObjectR的陣列和每個MyObjectS通過使用MyObjectR的特定屬性進行初始化。
如在下面的代碼行隱含(其不是用於VB.NET可接受語法):
Dim v As MyObjectS() = New MyObjectS() {u.Select(Function(a) a.MyProperty)}
在這裏,我想以某種方式使用迭代喂連續使用參數化的新的MyObjectS來創建它們的數組。當然,上面的語法行不正確。 (對於任何考慮這個想法的人,我需要補充一點,我不想在這裏涉及使用擴展運算符(即使可能),因爲MyObjectS可能是一個我不控制的類對象,也可以做不想用方法修改,例如,它可能是一個ListViewItem [它確實有一個參數化的New接受字符串。]因此,它不一定是我自己的對象,我可以叮叮噹噹。)
顯然,語法並不像我想在VB.NET中看到的那麼容易。但是我認爲在VB.NET中的某個地方的語法確實存在,我完全無知。
這裏有一個不同的選項,我也嘗試沒有成功(或預期成功):
Dim v As MyObjectS() = New MyObjectS() {u.Select(Function(a) a.MyProperty).ToArray}
只是爲了保持完整性,我知道我可以很容易地做到這一點是這樣的:
Dim w As List(Of MyObjectS) = New List(Of MyObjectS)
For Each i As String In u.Select(Function(a) a.MyProperty)
w.Add(New MyObjectS(i))
Next
Dim v As MyObjectS() = w.ToArray
但我想學習任何可能執行類似操作的新語法,而不需要創建一個List(Of T)來完成它。有一些很好的性能原因,如果沒有其他的話。
Dim v = u.Select(Function(a)a.MyProperty).Cast(Of MyObjectS).ToArray()'工作嗎? – Ryan