0

我想增加(使用计数器)C# 数组的值。但是我总是得到一个

索引超出范围错误。

这是我的代码。我正在尝试增加 datesStrings 数组中计数器的下一个位置,但错误将其停止。我应该如何增加“i”的值?

string[] datesStrings = { "" };      
int i = 0;

    if (counterDays.DayOfWeek.ToString() == "Monday")
            {
                datesStrings[i] = counterDays.ToString("yyyy-MM-dd");
                i++;
            }
            else 
            {
                counterDays = counterDays.AddDays(1);
                i++;
            } 

有什么建议么?TIA。

4

4 回答 4

4

这是因为您的数组是 1 个元素长,更改为List<string>();

List<string> datesStrings = new List<string>();     

if (counterDays.DayOfWeek.ToString() == "Monday")
{
    datesStrings.Add(counterDays.ToString("yyyy-MM-dd"));         
}

编辑:

创建方法:

public IEnumerable<DateTime> EachDay(DateTime from, DateTime thru)
{
    for(var day = from.Date; day.Date <= thru.Date; day = day.AddDays(1))
        yield return day;
}

并使用它

var mondaysStrings = EachDay(counterDays, DateTime)
                   .Where(x=>x.DayOfWeek==DayOfWeek.Monday)
                   .Select(x=>x.ToString("yyyy-MM-dd"));

它将选择从counterDays直到的日期范围内的所有星期一DateTime.Now,您可以将日期范围更改为您想要的任何日期

于 2013-11-12T08:32:06.887 回答
0

您只有 1 (0) 个职位:

string[] datesStrings = { "" };

你想如何前进到 1、2、3...?

于 2013-11-12T08:31:59.470 回答
0

你必须在使用它之前指定字符串数组的长度,像这样

string[] datesString = new string[10]; // whatever the size of array you want to create.

然后在代码中实现你的逻辑。它会起作用的。

于 2013-11-12T08:33:56.157 回答
0

我不确定您是否确实需要它,但这是最优雅的方法

//Create string list
List<string> datesStrings = new List<string>();
//Find all date items with Monday     
IEnumerable<DateTime> foundValues = counterDays.Where(result => result.DayOfWeek == DayOfWeek.Monday);
//Add found dates string representation to list
foreach(DateTime value in foundValues)
{
    datesStrings.Add(value.ToString("yyyy-MM-dd"));
}
于 2013-11-12T08:38:09.577 回答