为什么在使用日期时使用 ToString()?

  • 本文关键字:ToString 日期 c# tostring
  • 更新时间 :
  • 英文 :


我正在与Microsoft学院一起学习C#,在日期和时间的课程中,视频的制作者在日期使用了ToString方法。 例如:

DateTime myValue = DateTime.Now;
Console.WriteLine(myValue.ToString());
Console.ReadLine();

当我删除ToString方法时,我得到了相同的结果,我认为它用于数据用途,但保持原样而不是将其转换为string不是更好吗?

这可能是出于教学目的,以表明string是从myValue.ToString()获得的,而不是依靠Console.WriteLine()为您转换它。初学者可能不知道转换,并且明确表明string是从.ToString()获得的。

仅仅编写Console.WriteLine(myValue);可能会导致新学习者包含对象,而无需先创建其ToString(),然后调用其 .ToString() .

下面显示了一个示例:

public void ShowExample()
{
    DateTime myValue = DateTime.Now;
    Console.WriteLine(myValue.ToString()); // 5/1/2018 10:14:20 AM
    Foo myFoo= new Foo(); // Has no ToString method
    Console.WriteLine(myFoo); // ConsoleApplication.Foo
    Bar myBar = new Bar(); // Has custom ToString method
    Console.WriteLine(myBar); // Hi I'm from ToString()
    Console.ReadLine();
}
public class Foo
{
    int val = 9;
}
public class Bar
{
    public override string ToString()
    {
        return "Hi I'm from ToString()";
    }
}

它无需.ToString()即可工作,因为它具有接受Object参数的重载Console.WriteLine()。由于一切都派生自 Object ,并且Object有自己的ToString()方法,如果没有更好的匹配,这个版本的方法可以接受任何东西并尝试打印它。

你可以像这样考虑重载方法:

public static void WriteLine(object value)
{
    WriteLine(value.ToString());
}

。这样,此重载又调用string重载。

.Net是一个强类型平台。了解您正在处理语句的每个部分的类型是值得的。

对于DateTime值,它们不会以人类可读的格式在内部存储。如果您想在打印到控制台时看到一个漂亮的"5/1/2018"或"2018-05-01"值,这些都是字符串,您需要以某种方式将DateTime转换为string。在代码中执行此操作,而不是让 Object 重载处理它,可以更轻松地返回并具体说明所需的格式。但任何一个版本都真的"还行"。

方法Console.WriteLine()有许多重载。其中之一是 Console.WriteLine(string s) .您在第一个示例中使用它。它打印直接传递的字符串参数。

另一个过载是 Console.WriteLine(object o) .它接受任何实例(因为每个类型都派生自 object (,并在内部调用 Object.ToString() 方法,然后打印生成的字符串。从object派生的每个类型都继承 ToString() 方法,并且可以像DateTime一样重写它。 这就是您可以在第二个示例中删除ToString()的原因。

最新更新