Отрицательные последствия использования обобщенной функции, как это?

Мой вопрос здесь, каковы негативные последствия использования обобщенной функции, такой как эта? Вызов этой функции работает, и в модуле тестовой консоли он прекрасно компилируется. Я знаю, что это не строго типизированная функция, и это 100% плохая практика. Но это работает... отлично. Назначение функции, подобной этой, заключается в обработке ввода строки, который должен быть вставлен в определенном формате, в зависимости от типа. Я также прочитал некоторые другие вопросы по этому вопросу здесь, на stackru, и предложения, указывающие на использование (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 ответ

Решение

Да, иногда такие вещи становятся необходимыми, особенно если конечный тип не известен во время компиляции (что делает большинство других решений неудобным). Мой основной отзыв / наблюдение будет: Field_Type выглядит как перечисление, так что вы можете сделать это более аккуратным и более эффективным с Switch, Если переименовать, я бы назвал это ...Parse... так как это занимает String (возможно, с соответствием ...Format... это делает обратное), и я думаю, что некоторые результаты (особенно "blob" и "list") выглядят немного сомнительно. Но в противном случае: он выполняет свою работу.

Незначительный пункт: ваш GetConverter код может принимать тип вместо того, чтобы каждый раз инициировать структуру; в терминах C#, typeof(DateTime) и т.п.

Другие вопросы по тегам