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