我正在与Microsoft Academy学习C#,在日期和时间的课程中,视频制作者在日期使用了ToString
方法。
例如:
DateTime myValue = DateTime.Now;
Console.WriteLine(myValue.ToString());
Console.ReadLine();
当我删除ToString
方法时,我得到了相同的结果,我认为它可以用于数据使用,但是保持原样不是更好,而不是将其转换为{{ 1}}?
答案 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。由于所有都来自Object
,Object
拥有自己的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()
。