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

时间:2018-05-01 13:58:17

标签: c# tostring

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

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

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

3 个答案:

答案 0 :(得分:4)

这可能是出于教学目的,表明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()";
    }
}

答案 1 :(得分:4)

没有.ToString(),因为Console.WriteLine()有一个overload that accepts an Object argument。由于所有都来自ObjectObject拥有自己的ToString()方法,如果没有更好的匹配此版本的方法可以接受任何并尝试打印它。

你可以想到这样的重载方法:

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

...这样过载又会调用the string overload

.Net是一个强类型平台。了解您为声明的每个部分处理的类型是值得的。

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

答案 2 :(得分:1)

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

另一个重载是Console.WriteLine(object o)。它接受任何实例(因为每个类型都派生自object)并在内部调用Object.ToString()方法,然后打印结果字符串。从object派生的每种类型都会继承ToString()方法并可以覆盖它,就像DateTime一样。这就是为什么你可以删除第二个例子中的ToString()