Private Shared Property _dictOfCoinNameNameBasedOnMarketandSymbol As Dictionary(Of String, String)
Get
End Get
Set(value As Dictionary(Of String, String))
End Set
End Property
如果不是字典,通常的方法是将变量转换为属性。然后,可以在set中设置断点并得到。
设置一个字典作为属性会让编译器认为我需要一个set方法来设置字典。我想要一个set方法来设置属性中的项。
我希望能够替换出现次数过多的
_dictOfCoinNameNameBasedOnMarketandSymbol("key") = "value"
放入代码中,我也可以设置断点。我怎么知道?
我想我可以只是创建一个普通的子,并替换所有出现的_dictOfCoinNameNameBasedOnMarketandSymbol("key") = "value"成AssignCoinNameNameBasedOnMarketandSymbolWithKeyValue("key","value"
我写的
Function GetCoinNameNameBasedOnMarketandSymbol(key As String) As String
Return _dictOfCoinNameNameBasedOnMarketandSymbol(key)
End Function
Sub AssignCoinNameNameBasedOnMarketandSymbol(key As String, coinname As String)
_dictOfCoinNameNameBasedOnMarketandSymbol(key) = coinname
End Sub
然后我将手动所有其他出现的_dictOfCoinNameNameBasedOnMarketandSymbol
。然后,如果我看到_dictOfCoinNameNameBasedOnMarketandSymbol
被分配了错误的值,我可以在AssignCoinNameNameBasedOnMarketandSymbol
中设置断点。
这种技术的问题是,无论如何都不能自动执行它。我只需要遍历代码并逐个替换。
有更优雅的方式吗?
如果_dictOfCoinNameNameBasedOnMarketandSymbol
不是字典,那么将其更改为具有适当get和set值的属性就可以了。我甚至不需要改变任何东西。
我想我可能一开始误解了这个问题。为了完整起见,我将把我原来的答案留在下面,但我将根据我的新理解在这里回答。
在我看来,你真正需要的是一个索引属性来包装Dictionary
,例如
Public Class SomeClass
Private Shared ReadOnly valuesByKey As New Dictionary(Of String, String)
Public Shared Property ValueByKey(key As String) As String
Get
Return valuesByKey(key)
End Get
Set
valuesByKey(key) = Value
End Set
End Property
End Class
您现在可以获取和设置ValueByKey
属性,并且永远不能直接访问类中的Dictionary
对象(只读或其他)。您还可以在getter中的Return
语句之前以及setter中的现有代码行之前或之后添加任何您喜欢的代码。
原始回答:
你想要的是ReadOnly
属性。这正是集合在。net框架中暴露的方式,例如Control.Controls
、ComboBox.Items
、DataSet.Tables
、DataTable.Columns
、DataTable.Rows
等等。在您的例子中,它看起来像这样:
Public Shared ReadOnly Property CoinNamesByMarketAndSymbol As New Dictionary(Of String, String)
我冒昧地给这个属性起了一个合理的名字。注意,这是一个自动属性,也就是说,你不需要显式地指定getter或setter。如果不使用auto-property,等效代码是这样的:
Private Shared _coinNamesByMarketAndSymbol As New Dictionary(Of String, String)
Public Shared ReadOnly Property CoinNamesByMarketAndSymbol As Dictionary(Of String, String)
Get
Return _coinNamesByMarketAndSymbol
End Get
End Property
注意,我已经声明了这个属性Public
。我注意到你已经宣布它为Private
,但这似乎没有什么意义。这样的财产有什么用呢?如果它只能在内部访问,那么为什么不直接使用字段呢?
使用上面的代码,你现在可以从属性中获得Dictionary
来获取,添加或删除项目,但你不能替换整个Dictionary
,即你可以这样做:
Dim coinName = SomeClass.CoinNamesByMarketAndSymbol(marketAndSymbol)
SomeClass.CoinNamesByMarketAndSymbol.Add(marketAndSymbol, coinName)
SomeClass.CoinNamesByMarketAndSymbol.Remove(marketAndSymbol)
但是你不能这样做:
SomeClass.CoinNamesByMarketAndSymbol = New Dictionary(Of String, String)