Отрицательные последствия использования обобщенной функции, как это? - PullRequest
1 голос
/ 26 октября 2011

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

1 голос
/ 26 октября 2011

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

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

...