C# “中的0是什么?”;{0:MM dd yyyy}”;做

C# “中的0是什么?”;{0:MM dd yyyy}”;做,c#,asp.net-mvc,datetime-format,C#,Asp.net Mvc,Datetime Format,我是C/MVC世界的新手。今天我花了很多时间研究如何以我想要的格式显示DateTimeOffset对象。终于让它这样工作了 Html.TextBoxFor(model => model.DeliveryDate,"{0:MM/dd/yyyy}", new { htmlAttributes = new { @class = "datepicker" } }) 但我仍然不理解格式字符串中“0”的重要性。如果我将0替换为任何其他数字或将其完全删除

我是C/MVC世界的新手。今天我花了很多时间研究如何以我想要的格式显示DateTimeOffset对象。终于让它这样工作了

Html.TextBoxFor(model => model.DeliveryDate,"{0:MM/dd/yyyy}", 
                     new { htmlAttributes = new { @class = "datepicker" } })  

但我仍然不理解格式字符串中“0”的重要性。如果我将0替换为任何其他数字或将其完全删除,则页面将断开。有人能帮我理解这一点吗?

这是一个带参数的格式字符串(例如在Console.WriteLine或string.format中使用)。
{0}
将是第一个参数的占位符,
{0:mm/dd/yyyy}
只是一个格式字符串,用于将第一个参数转换为字符串。

使用时,可以为参数传递空格,例如
{0}
{1}
等,这些是作为方法参数传递的索引。asp.net剃须刀助手也是如此

对于示例:
{0:0.00}
,您还可以提供索引后的格式,作为带2位小数的数字的格式,或日期等的
{1:dd/MM/yyyy}

字符串插值 有一种新的方法可以使用
字符串插值来实现它。基本上,您可以在不生成新字符串的情况下对字符串上的值进行压缩。对于示例:

var i = 18;
var s = $"You are {age} years old.";
var today = $"Today is {DateTime.Now:D}";

var date = DateTime.Now.Add(1);
var tommorrow = $"Tommorrow is {date:dd/MM/yyyy}";
由于字符串以
$
开头,因此可以在
{
}
之间传递参数。您还可以使用与在
string.format
上使用的格式相同的格式来格式化数据。对于示例:

var i = 18;
var s = $"You are {age} years old.";
var today = $"Today is {DateTime.Now:D}";

var date = DateTime.Now.Add(1);
var tommorrow = $"Tommorrow is {date:dd/MM/yyyy}";

0是参数/属性的占位符(在本例中)
DeliveryDate
。。类似于
String.Format
示例。。。因此,当您的视图被渲染时。。0将被替换为以MM/dd/yyyy格式保存的
DeliveryDate
中的任何值


格式字符串中的{0}是一个格式项。0是将在该位置插入其字符串值的对象的索引。(索引从0开始。)如果要插入的对象不是字符串,则在将其插入结果字符串之前,将调用其ToString方法将其转换为字符串。

请参阅
string.Format()的文档:

简而言之,当模型呈现为HTML文本时,
DeliveryDate
对象值将传递给
String.Format()
,其中
{0}
指示传递给
Format()
的值数组中第一个值的索引。所以
{0:MM/dd/yyyy}
只是指使用日期组件格式化数组中的第一个值。基本上,它会在内部执行类似的操作:

String s = SomeValueArray[0].ToString("MM/dd/yyyy");

0将被模型中的datevalue替换。此格式的DeliveryDate MM/dd/yyyyy截止日期无效谢谢大家的回答。现在我明白了。我在想,这个数字可以用来抵消日期的天数或其他什么。感谢您的回复。非常有用。