[英]I am trying to implement a dictionary in VB.net where the value can be either a string or decimal
我從下面的代碼開始
Public Class DictionaryFromExcel(Of itemType)
Implements IDictionary(Of String, itemType)
Private _Dictionary As Dictionary(Of String, itemType)
Public Sub New(ByVal FileName As String, ByVal Sheet As String, ByVal StartColumnName As String)
MyBase.New()
_Dictionary = New Dictionary(Of String, itemType)(System.StringComparer.OrdinalIgnoreCase)
Visual Studio 2012為其余的代碼創建了一個模板,為所有必需的例程保留了存根。 除了itemType可以是字符串或十進制的事實外,我對Dictionary的常規實現感到非常滿意。 如何使用基礎實現?
我試圖僅通過調用底層實現來實現add例程,但是卻收到一個錯誤,即String類型的值無法轉換為itemType。 即使實現了所有必需的例程,我仍然不知道如何從itemType轉換為字符串/小數。
_Dictionary.Add(key, value.ToString)
最好的選擇是在字典上實現object屬性,例如
Dim dictionary As New Dictionary(Of String, object)
由於您的類型不是為容納通用數據類型而設計的,而是為兩個特定類型的,因此沒有理由您的類型應該是通用的。 將其更改為簡單的Class DictionaryFromExcel
。
一種方法是使用Dictionary(Of String, Object)
,並讓您的類型實現IDictionary(Of String, Object)
。 另一種方法是使用Dictionary(Of String, String)
保存字符串,並使用Dictionary(Of String, Decimal)
保存數字。 然后,您的集合可以提供IDictionary(Of String, Object)
只讀實現(可以讀取存儲在任一詞典中的內容),具有Strings
屬性,該屬性返回實現IDictionary(Of String, String)
的包裝對象,並且一個屬性Decimals
,該屬性返回實現IDictionary(Of String, Decimal)
的包裝對象。
前一種方法將能夠不受限制地將任何類型的數據存儲在字典中。 這可能不是好事。 調用者還必須在每次使用對象時都要對從您的對象讀取的任何數據進行類型轉換。 后一種方法將使您的類型僅被硬編碼以處理Decimal
和String
,但是訪問myThing.Decimals("George")
該類型的用戶可以使用返回的值作為Decimal
而無需進行類型轉換。 后一種方法的最大缺點是,如果代碼執行myThing.Decimals("Fred")=4.4d
,然后再執行myThing.Strings("Fred")="Flintstone"
,則必須決定應該怎么myThing.Decimals("Fred")=4.4d
。 使后者調用使myThing.Decimals("Fred")
無效會使人感到驚訝,但如果不是這樣,則不清楚應返回什么myThing("Fred")
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.