使用像这样的通用函数的负面影响?

时间:2011-10-26 05:42:16

标签: .net vb.net function generic-function

我的问题是,使用像这样的通用函数有什么负面影响?调用此函数确实有效,并且在测试控制台模块中,它编译完全正常。我知道这不是一个强类型的函数,并且是%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

1 个答案:

答案 0 :(得分:1)

是的,有时这样的事情变得必要,尤其是如果在编译时不知道最终类型(使大多数其他解决方案变得尴尬)。我的主要反馈/观察结果是:Field_Type看起来是一个枚举,所以你可以用Switch使这个更整洁,更有效率。重新命名,我会可能调用与...Parse...相关的内容,因为它需要String(可能与匹配的...Format...相反),而我认为一些回报(特别是“blob”和“list”)看起来有点可疑。但除此之外:它完成了工作。

次要问题:您的GetConverter代码可以采用类型,而不是每次都必须初始化结构;在C#术语中,typeof(DateTime)等。