我有一個大型的代碼庫,它假定字段包含單個的T類值。不幸的是,新客戶端要求我們擁有這些字段指向List(Of T)。我可以改變字段類型,但所有舊的代碼都會中斷。使用從列表中返回項目的呼叫或列表中的第一項來實現API
在VB中我會解決這個問題是這樣的:
Private theList As List(Of T) = new List(Of T)
Public ReadOnly Property Thing() As T
Get
Return theList(0)
End Get
End Property
Public ReadOnly Property Thing(i As Integer) As T
Get
Return theList(i) 'yes, this should throw
End Get
End Property
這依賴於VB對具有相同名稱的多個特性的能力,以及對超載參數傳遞和索引都括號。但是,C#在後面使用大括號,並且沒有與參數化屬性相對應的任何內容。相反,他們有「this []」,並且由於這個名字是私人的,所以你不能有一個「this」沒有參數,另一個有一個(這是對的,對吧?)。
但我怎麼會在C#中做到這一點?我懷疑我可以用模板做到這一點,但我看起來有點失落。我可以想象一個帶有this[]
的List(Of T)子類,但是我不確定如何在其他類中實現訪問器,以便我仍然有Thing
和Thing[i]
。另外需要注意的是,這些對象通常在VBA中使用,因此需要COM可導出。
我真的不清楚你在問什麼。你能否展示一些你現在有的代碼示例,以及一些你希望得到它們的例子調用或結果? – CodeCaster
VB示例沒有返回單個值與返回列表,它們都返回單個值,只有一個返回第一個值,另一個返回索引值。 你不能改變現有屬性的數據類型,你將不得不添加新的屬性來公開一個集合 –
這是正確的@MichaelBlackburn,他們都返回一個單一的項目。但是,第二個版本具有「列表感知」API。也就是說,被調用者知道有多個項目並且可以要求列表中的特定項目。在第一個例子中,被調用者不知道有一個列表,並且總是期望第一個項目。 –