无法从'string'转换为'System.IFormatProvider'

Con*_*eak 9 c# asp.net

这段代码给了我这个错误:

var n = "9/7/2014 8:22:35 AM";
var m = n.ToString("yyyy-MM-dd'T'HH:mm:ssZ");
Run Code Online (Sandbox Code Playgroud)

但是这段代码可以正常工作,并以适当的格式返回日期.

var n = DateTime.Now;
var m = n.ToString("yyyy-MM-dd'T'HH:mm:ssZ");
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么第一个代码不起作用以及如何使其工作?

sir*_*ide 22

您需要了解静态类型的工作原理.在第一个,类型nstring.该类型string确实有一个ToString()方法,但该方法不带参数并返回相同的字符串对象,或者它需要格式提供程序.由于您提供了参数,因此编译器假定您指的是第二个版本,但类型不匹配.

也许你正在尝试做的是将一个字符串转换日期第一,这是可以做到通过分析它DateTimeParseTryParse方法:

var n = DateTime.Parse("9/7/2014 8:22:35 AM");
Run Code Online (Sandbox Code Playgroud)

在这里,我们将a转换stringDateTime.类型nDateTime.

我认为在你弄清楚C#的时候不要使用它是个好主意var.如果明确列出类型,您将更好地了解正在发生的事情,编译器将更早地标记错误.在这种情况下,你会在第一行得到错误,这很明显.它会抱怨为一个字符串分配一个字符串DateTime.没有奇怪的东西IFormatProvider,这一点都不明显.您的代码如下所示:

DateTime n = "9/7/2014 8:22:35 AM";
string m = n.ToString("yyyy-MM-dd'T'HH:mm:ssZ");
Run Code Online (Sandbox Code Playgroud)

在这个例子中,你将在第一行得到一个错误,然后你可以清楚地看到你正在尝试将类型的文字值(字符串"9/7/2014 8:22:35 AM")分配string给a类型的变量DateTime,它不能工作.