Code Bye

默认情况下调用的是哪个ToString(。)

本人下面两段代码,一个是带ToString()的一个是不带的,问一下这两个程序应该输出一样啊?为什么不一样,DateTime.Now默认情况下调用的是重写的ToString()吗?假如不是问一下默认情况下DateTime.Now调用的是哪个ToString(…)?还有一个问题为什么用了ToString()的代码: Console.WriteLine(“{0:d}at{0:t}”, DateTime.Now.ToString());  这{0:d}和{0:t}这两个为什么输出一样?麻烦了
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace delete
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(“{0:d}at{0:t}”, DateTime.Now);
}
}
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace delete
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(“{0:d}at{0:t}”, DateTime.Now.ToString());
}
}
}
解决方案

20

当然调用的是DateTime结构的ToString()方法了
详情见https://msdn.microsoft.com/zh-cn/library/k494fzbf(v=vs.110).aspx
1、Console.WriteLine(“{0:d}at{0:t}”, DateTime.Now);
2、Console.WriteLine(“{0:d}at{0:t}”, DateTime.Now.ToString());
输出格式控制符{0:d},{0:t}对DateTime类型的变量才有效,于是对于1,是你预期的
而对于2,DateTime.Now.ToString()已经是一个字符串了,不是一个变量,也不是DateTime类型的

20

Console.WriteLine(“{0:d}at{0:t}”, DateTime.Now);
差不多等价于
Console.WriteLine(“{0}at{1}”, DateTime.Now.ToString(“d”, null), DateTime.Now.ToString(“t”, null));
至于第二种写法,本身就有问题了
format针对的是数字和时间
DateTime.Now.ToString()已经返回字符串了,所以第一个参数冒号后面带字母都是多余的

20

图中第一个
本人多说了是没有参数的那个

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明默认情况下调用的是哪个ToString(。)