我正在维护一个现有项目,我找到了这行代码:
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)(这是隐含的)是一个好主意- 这将涉及一个盒子,类型检查和拆箱.坦率地说,对我来说这似乎是一个愚蠢的理由,就像"写错代码,得到不好的结果".
正如您在当前的BCL来源中看到的那样:
public static DateTime ToDateTime(DateTime value) {
return value;
}
Run Code Online (Sandbox Code Playgroud)
没有实际转换,因此您可以安全地删除这些调用.