2011-10-26 5 views
1

ここで私の質問は、このような一般的な関数を使用することによる悪影響は何ですか?この関数を呼び出すと動作し、テストコンソールモジュールでは完全にコンパイルされます。私はこれが強く型付けされた関数ではなく、%100の悪い習慣であることを知っています。しかし、それは...完璧に動作します。このような関数の目的は、型に応じて特定の形式で挿入する必要がある文字列入力を処理することです。私はまた、ここでstackoverflow上のいくつかの他の質問を読んで、(Of T)関数とそのようなバリエーションを使用することを指摘しています。どうしてこのようにしないのですか?まったく無しのクラスや大量のコードを作成しなくても、これを実現するもう1つの簡単な方法があります。私はこれがこれを扱う "エレガントな"方法ではないことを知っています。誰かが提案をしているなら、私はすべて耳にします。ありがとうございました! :)このような汎用関数を使用した場合のネガティブな影響?

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 
+0

関数の上に「else else」があれば、それはどのように一般的ですか? –

+1

seconded:ここでは「generic」というフレーズを避けることにします。その用語には具体的な意味があります。*これは*ではありません。 –

+0

私はこれがhttp://en.wikipedia.org/wiki/God_objectアンチパターン – rerun

答えて

1

はい、時々そのようなことが必要になる、特に最終型はコンパイル時(ぎこちない他のほとんどのソリューションを作る)で知られていない場合。私の主なフィードバック/観察は:は列挙型に見えるので、Switchでこれをより細かく効率的にすることができます。命名RE、私は...Parse...に関連した何かが、それは(おそらく逆を行い、一致...Format...で)Stringがかかるため、と私は(特に「ブロブ」と「リスト」)を返すの一部が見えると思うことおそらく呼ぶだろう疑わしい。しかしそうでなければ:それは仕事を終わらせる。

マイナーポイント:GetConverterコードは、毎回structを初期化するのではなく、タイプを使用できます。 C#用語ではtypeof(DateTime)など

+0

洞察をいただきありがとうございます。私はあなたの提案を試してみます。 – wakurth

関連する問題