gpt4 book ai didi

c# - 将 String.Format() 与 DateTime 数组一起使用时出现问题

转载 作者:行者123 更新时间:2023-12-02 11:02:23 24 4
gpt4 key购买 nike

我希望能够帮助您理解为什么以下 C# 代码不起作用。

//string[] array = new string[] { "a", "b", "c", "d" }; // this array works
var array = new [] {
new DateTime(2000, 1, 1),
new DateTime(2010, 12, 31)
};

var format = "{0:MMM}{1:MMM}";

Console.WriteLine(string.Format(format, array)); // compiles, but crashes at runtime

它编译没有问题,但在执行时崩溃并出现以下错误:

Run-time exception (line 15): Index (zero based) must be greater than or equal to zero and less than the size of the argument list.

Stack Trace: [System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.] at System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args) at System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args) at System.String.Format(String format, Object arg0) at Program.Main() :line 15

我预计the String.Format overload that accepts an object array可以像处理字符串数组一样处理 DateTime 数组,但我是否误解了什么?

最佳答案

DateTime[] 不是 object[];这不是数组方差的工作原理 - 所以:如果将 DateTime[] 数组传递给 string.Format,它不会使用 Format(string , object[]) 重载 - 您有效使用将整个 DateTime[] 作为单个对象传递给 Format(string, object),因此从Format的角度来看,您只能使用 token 0

基本上,使用:

var array = new object[] {
new DateTime(2000, 1, 1),
new DateTime(2010, 12, 31)
};

它应该可以工作。

关于c# - 将 String.Format() 与 DateTime 数组一起使用时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60947364/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com