書式 - todatetime c#




何が目的です:public static DateTime ToDateTime(DateTime値).NET Frameworkのですか? (3)

現在のBCLソースからわかるように:

public static DateTime ToDateTime(DateTime value) {
        return value;
}

実際の変換はないので、これらの呼び出しを安全に削除することができます。

私は既存のプロジェクトを維持しており、このコード行が見つかりました:

Datetime someDate = ....;
var anotherDateTime = Convert.ToDateTime(someDate);

最初は、暗黙的にToStringメソッドを呼び出すことによってsomeDateが文字列に変換されることを期待しsomeDateが、間違っていました。 このメソッドでF12キーを押すと、 System.Convertクラスのメソッドの定義が次のように表示されます。

// Summary: Returns the specified System.DateTime object; no actual conversion is performed.
// Parameters:
//   value: A date and time value.
// Returns:
//     value is returned unchanged.
public static DateTime ToDateTime(DateTime value);

まず 、.NET Frameworkには、最初はこのようなメソッドがあります。なぜなら、このメソッドはNothingを実行しているとドキュメントに書かれているからです。
2番目のコードをリファクタリングしている間に、このメソッドの呼び出しを動作に影響を与えずに安全に削除できますか?


Convertクラスは、 IConvertibleインターフェイスを実装する型で動作するように意図されているためです。

このインターフェイスには、実装タイプをdecimalbyteDateTimeなどのCLRタイプに変換するメソッドが含まれています。これらのタイプのそれぞれは、 IConvertible自身を実装します。

したがって、 Convert.ToDateTime(DateTime d)は「何もしない」唯一の方法ではありません。 Convert.ToChar(char c)など、 IConvertibleも実装しているCLR型のいずれにも存在します。 それは、これらのタイプのすべてがIConvertible実装しているという事実から来ます。

これについて詳しくは、 Convertクラスのソースコードのcommentsを参照してください。


はい、削除できます。 それは完全に冗長です。 理由:私誰かがConvert.ToDateTime(object) (暗黙のうちに)を呼び出すのを避けることをお勧めしたいと思っていたと思います。これは、ボックス、型チェック、およびunboxを伴います。 率直に言って、それは私には愚かな理由のように、 "悪いコードを書く、悪い結果を得る"の行に沿っているようです。





datetime