我有一个大型的代码库,它假定字段包含单个的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。也就是说,被调用者知道有多个项目并且可以要求列表中的特定项目。在第一个例子中,被调用者不知道有一个列表,并且总是期望第一个项目。 –