1

ここでの私の質問は、このような一般的な関数を使用することの悪影響は何ですか? この関数の呼び出しは機能し、テスト コンソール モジュールでは完全に正常にコンパイルされます。これは厳密に型指定された関数ではなく、%100 悪い習慣であることはわかっています。しかし、それは機能します...完全に。このような関数の目的は、タイプに応じて特定の形式で挿入する必要がある文字列入力を処理することです。また、これに関するいくつかの他の質問をスタックオーバーフローで読み、(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
4

1 に答える 1

1

はい、特にコンパイル時に最終的な型がわからない場合(他のほとんどのソリューションが厄介になる)、そのようなことが必要になることがあります。私の主なフィードバック/観察は次のとおりです。Field_Type列挙型のように見えるので、Switch. 名前を付け直すと、 (おそらく逆のマッチングを伴う)が必要なので、関連する何かと呼ぶことになるでしょう。戻り値の一部 (特に "blob" と "list") は少し疑わしく見えると思います。しかし、そうでなければ、それは仕事を成し遂げます。...Parse...String...Format...

マイナー ポイント:コードは、毎回構造体を初期化するのではなく、GetConverterを取ることができます。C#用語などで。typeof(DateTime)

于 2011-10-26T05:54:21.527 に答える