繁体   English   中英

我正在尝试在VB.net中实现一个字典,其中的值可以是字符串或十进制

[英]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)的包装对象。

前一种方法将能够不受限制地将任何类型的数据存储在字典中。 这可能不是好事。 调用者还必须在每次使用对象时都要对从您的对象读取的任何数据进行类型转换。 后一种方法将使您的类型仅被硬编码以处理DecimalString ,但是访问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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM