我有一点麻烦让这个c#代码工作,我可以让它工作,如果我使用控制台。写,我已经注释掉了,但我可以得到相同的结果存储在这个数组中,供我在我的程序的不同部分使用。
FileInfo[] selectionFileOrder;
for (int index = 0; index < dateAllOrder.Length; index++)
{
if (dateAllOrder[index].LastAccessTime.Month == DateTime.Now.Month)
{
int i = 0;
i++;
selectionFileOrder[i] = dateAllOrder[index];
// Console.Write("{1}. {0}", dateAllOrder[index].Name, index);
// Console.Write(" ({0}) ", dateAllOrder[index].Length);
Console.WriteLine();
}
}
我看了看谷歌,似乎找不到我的问题的任何答案,我知道这是变量selectionFileOrder是无符号的,但我没有任何东西分配给它。任何新想法都会有帮助的。
谢谢
您需要初始化数组:
FileInfo[] selectionFileOrder = new FileInfo[dateAllOrder.Length];
或者更好,使用List:
IList<FileInfo> selectionFileOrder = new List<FileInfo>();
foreach(FileInfo item in dateAllOrder)
{
if (item.LastAccessTime.Month == DateTime.Now.Month)
{
selectionFileOrder.Add(item);
// Console.Write("{1}. {0}", dateAllOrder[index].Name, index);
// Console.Write(" ({0}) ", dateAllOrder[index].Length);
Console.WriteLine();
}
}
或者最好使用LINQ!
我将使用LINQ来做到这一点:
FileInfo[] selectionFileOrder = dateAllOrder.Where(
d => d.LastAccessTime.Month == DateTime.Today.Month).ToArray();
因为看起来你事先不知道数组需要多大,我建议使用如下列表:
var selectionFileOrder = new List<FileInfo>();
for (int index = 0; index < dateAllOrder.Length; index++)
{
if (dateAllOrder[index].LastAccessTime.Month == DateTime.Now.Month)
{
selectionFileOrder.Add(dateAllOrder[index]);
}
}
如果你愿意,可以稍后将列表赋值给数组
FileInfo[] array = selectionFileOrder.ToArray();
而且看起来你有一个bug, i
总是为1,我认为这不是你想要的。
使用列表而不是数组来允许您动态地增加selectionFileOrder的大小,如下所示:
var selectionFileOrder = new List<FileInfo>();
for (int index = 0; index < dateAllOrder.Length; index++)
{
if (dateAllOrder[index].LastAccessTime.Month == DateTime.Now.Month)
{
selectionFileOrder.Add(dateAllOrder[index]);
}
}
或者直接使用LINQ:
var selectionFileOrder = dateAllOrder.Where(o => o.LastAccessTime.Month == DateTime.Now.Month).ToArray();
您需要在变量中放入一个数组:
selectionFileOrder = new FileInfo[942];
确保将942
更改为有意义的相关数字