我的问题是,使用像这样的通用函数有什么负面影响?调用此函数确实有效,并且在测试控制台模块中,它编译完全正常。我知道这不是一个强类型的函数,并且是%100的坏习惯。但它完美无缺。像这样的函数的目的是处理需要根据类型以特定格式插入的字符串输入。我还在stackoverflow上阅读了其他一些问题,建议指向使用(Of T)函数和类似的变体。为什么不这样做呢?还是有另一种简单的方法来实现这一点,而无需创建一个完整的任何类或更大量的代码。我知道这不是处理这个问题的“优雅”方式,所以如果有人有建议,我会全力以赴。谢谢! :)
Private Function ConvertFieldValueByType(ByVal type As Field_Type, ByVal value As String)
If type = Field_Type.FIELD_TYPE_DATE Then
Dim dt As Date = DirectCast(TypeDescriptor.GetConverter(New Date(1990, 5, 6)).ConvertFrom(value), Date)
Return dt
ElseIf type = Field_Type.FIELD_TYPE_DATETIME Then
Dim dt As DateTime = DirectCast(TypeDescriptor.GetConverter(New DateTime(1990, 5, 6)).ConvertFrom(value), DateTime)
Return dt
ElseIf type = Field_Type.FIELD_TYPE_BLOB Then
Return value
ElseIf type = Field_Type.FIELD_TYPE_LIST Then
Return value
ElseIf type = Field_Type.FIELD_TYPE_LONG Then
Return Convert.ToInt64(value)
ElseIf type = Field_Type.FIELD_TYPE_NUMBER Then
Return Convert.ToInt32(value)
ElseIf type = Field_Type.FIELD_TYPE_SHORT Then
Return Convert.ToInt16(value)
ElseIf type = Field_Type.FIELD_TYPE_STRING Then
Return value
ElseIf type = Field_Type.FIELD_TYPE_TIME Then
Dim dt As DateTime = DirectCast(TypeDescriptor.GetConverter(New DateTime(1990, 5, 6)).ConvertFrom(value), DateTime)
Return dt
ElseIf type = Field_Type.FIELD_TYPE_UNKNOWN Then
Return value
Else
Return value
End If
End Function
答案 0 :(得分:1)
是的,有时这样的事情变得必要,尤其是如果在编译时不知道最终类型(使大多数其他解决方案变得尴尬)。我的主要反馈/观察结果是:Field_Type
看起来是一个枚举,所以你可以用Switch
使这个更整洁,更有效率。重新命名,我会可能调用与...Parse...
相关的内容,因为它需要String
(可能与匹配的...Format...
相反),而我认为一些回报(特别是“blob”和“list”)看起来有点可疑。但除此之外:它完成了工作。
次要问题:您的GetConverter
代码可以采用类型,而不是每次都必须初始化结构;在C#术语中,typeof(DateTime)
等。