好吧,這是一個冒險,但是這是我的結果:
現有的總和擴展只提供基本類型作爲結果,因此需要選擇。你發現了一個,好的。
現在下一步對我來說是寫我自己的擴展支持您的需求。
所以我正在尋找你的建議,一個接口,需要實現類有一個任何類型的操作符。 那麼沒有任何。你也不能自己定義這樣的接口,因爲操作者本質上是靜態的,不能被覆蓋。
因此,下一步是通過一個泛型類型來擴展sum,這個泛型類型將自身限制爲具有運算符的類型。
原來你不能將泛型類型約束到結構。
所以在這裏,我得到了工作
所以當我明白你想要做這樣的事情代碼:
Public Class MainClass
' ...
Public Shared Sub Test()
Dim lsta As New List(Of SomeClass)(New SomeClass() {
New SomeClass(5, 10, 2.5),
New SomeClass(7, 23, 1.2)
}
)
Dim sum As SomeClass = lsta.Sum(Of SomeClass)()
End Sub
' ...
End Class
現在你的結構是要去必須是一流的,像這樣的:
Public Class SomeClass
Public Sub New(x As Int32, y As Int32, c As Double)
m_iX = x
m_iY = y
m_fC = c
End Sub
Private m_iX As Int32
Private m_iY As Int32
Private m_fC As Double
Public ReadOnly Property X
Get
Return m_iX
End Get
End Property
Public ReadOnly Property Y
Get
Return m_iY
End Get
End Property
Public ReadOnly Property C
Get
Return m_fC
End Get
End Property
' Custom operator:
Public Shared Operator +(a As SomeClass, b As SomeClass) As SomeClass
Return New SomeClass(a.X + b.X, a.Y + b.Y, a.C * b.C)
End Operator
' This is coming in handy for initializing the first element in your sum
Public Shared Function NeutralElement() As SomeClass
Return New SomeClass(0, 0, 1)
End Function
End Class
最後在這裏延伸:
Public Module ListExtension
<Extension()> _
Public Function Sum(Of T As SomeClass)(source As IEnumerable(Of SomeClass)) As SomeClass
' Note we have to constain T to SomeClass (also SomeClass cannot be a Structure :))
Dim returnValue As T = SomeClass.NeutralElement()
For Each el As T In source
returnValue = returnValue + el
Next
Return returnValue
End Function
End Module
我希望這清除了一些問題,提出任何問題,並且,
...有樂趣實現它!
[VB.NET LINQ Query:獲取特定結構成員的所有值之和]的可能重複(http://stackoverflow.com/questions/1785403/vb-net-linq-query-getting-the- sum-of-all-values-for-specific-structure-member) – Monika