目的是什么:.NET Framework中的公共静态DateTime ToDateTime(DateTime值)?

Hak*_*tık 24 .net c# datetime

我正在维护一个现有项目,我找到了这行代码:

Datetime someDate = ....;
var anotherDateTime = Convert.ToDateTime(someDate);
Run Code Online (Sandbox Code Playgroud)

起初,我希望someDate通过ToString隐式调用方法将其转换为字符串,但我错了.当我在方法上按下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);
Run Code Online (Sandbox Code Playgroud)

首先为什么.NET框架首先有这样的方法,因为文档说这个方法什么都没做?
第二,虽然我正在重构代码,但是我可以安全地删除对此方法的调用而不影响行为吗?

Adr*_*ian 35

这是因为Convert该类旨在使用实现该IConvertible接口的类型.

此接口包含方法,将一个执行类型CLR类型一样decimal,byte,DateTime等等.每个这些类型的实现IConvertible自己.

所以,Convert.ToDateTime(DateTime d)这不是唯一做"没事"的方法.它也存在于任何实现的CLR类型中IConvertible,例如Convert.ToChar(char c).它只是来自所有这些类型实现的事实IConvertible.

您可以在课程源代码的注释中阅读更多相关信息Convert.


Mar*_*ell 12

是的,你可以删除它.这完全是多余的.至于为什么:我有人认为避免人们不小心打电话Convert.ToDateTime(object)(这是隐含的)是一个好主意- 这将涉及一个盒子,类型检查和拆箱.坦率地说,对我来说这似乎是一个愚蠢的理由,就像"写错代码,得到不好的结果".


dym*_*oid 6

正如您在当前的BCL来源中看到的那样:

public static DateTime ToDateTime(DateTime value) {
        return value;
}
Run Code Online (Sandbox Code Playgroud)

没有实际转换,因此您可以安全地删除这些调用.