C# 按日期字符串对列表框排序c

C# 按日期字符串对列表框排序c,c#,winforms,visual-studio,listbox,C#,Winforms,Visual Studio,Listbox,我正在尝试按日期对列表框项目进行排序,但不确定如何进行排序。我已经使用正则表达式创建了一个包含日期的字符串,但是我不知道如何使用这个字符串对列表框进行排序。如有任何意见,将不胜感激。。请看下面我的代码 DirectoryInfo dir = new DirectoryInfo("../Debug/"); FileInfo[] files = dir.GetFiles("*.txt"); foreach (FileInfo file in files) { string dueDate

我正在尝试按日期对列表框项目进行排序,但不确定如何进行排序。我已经使用正则表达式创建了一个包含日期的字符串,但是我不知道如何使用这个字符串对列表框进行排序。如有任何意见,将不胜感激。。请看下面我的代码

DirectoryInfo dir = new DirectoryInfo("../Debug/");
FileInfo[] files = dir.GetFiles("*.txt");

foreach (FileInfo file in files)
{
    string dueDate = File.ReadAllText(file.Name);

    Regex regex = new Regex(@"\d{2}/\d{2}/\d{4}");
    Match mat = regex.Match(dueDate);

    string duedate = mat.ToString();//string containing date
    listBox1.Items.Add(file);
}

我会这样做:

DirectoryInfo dir = new DirectoryInfo(@"../Debug/");
FileInfo[] files = dir.GetFiles("*.txt");
Dictionary<FileInfo, DateTime> filesWithDueDate = new Dictionary<FileInfo, DateTime>();

foreach (FileInfo file in files)
{
    string dueDate = File.ReadAllText(file.FullName);

    Regex regex = new Regex(@"\d{2}/\d{2}/\d{4}");
    Match mat = regex.Match(dueDate);

    DateTime duedate = Convert.ToDateTime(mat.ToString());

    filesWithDueDate.Add(file, duedate);
}

var sortedFiles = filesWithDueDate.OrderBy(a => a.Value).Select(b => b.Key.Name).ToArray();

listBox1.Items.AddRange(sortedFiles);

我会这样做:

DirectoryInfo dir = new DirectoryInfo(@"../Debug/");
FileInfo[] files = dir.GetFiles("*.txt");
Dictionary<FileInfo, DateTime> filesWithDueDate = new Dictionary<FileInfo, DateTime>();

foreach (FileInfo file in files)
{
    string dueDate = File.ReadAllText(file.FullName);

    Regex regex = new Regex(@"\d{2}/\d{2}/\d{4}");
    Match mat = regex.Match(dueDate);

    DateTime duedate = Convert.ToDateTime(mat.ToString());

    filesWithDueDate.Add(file, duedate);
}

var sortedFiles = filesWithDueDate.OrderBy(a => a.Value).Select(b => b.Key.Name).ToArray();

listBox1.Items.AddRange(sortedFiles);


您想从哪里读取日期?文件名或文件内容?@JonnyAppleseed注意在文件上使用ReadAllText.Name,它不能作为文件使用。Name将只返回其名称,而不返回路径。因此,无论是用户ReadAllTextfile,还是您想要名称本身字符串dueDate=file.name。如果您按照我对其他问题的建议为项目使用类,您可以添加日期属性,并在创建实例时填充它。这可以用于排序。从目前的情况看,你似乎在不知道自己在哪里、想去哪里的情况下跳过了问题。。提示:您很可能想切换到列表视图。@RezaAghaei字母顺序对日期无效。您想从何处读取日期?文件名或文件内容?@JonnyAppleseed注意在文件上使用ReadAllText.Name,它不能作为文件使用。Name将只返回其名称,而不返回路径。因此,无论是用户ReadAllTextfile,还是您想要名称本身字符串dueDate=file.name。如果您按照我对其他问题的建议为项目使用类,您可以添加日期属性,并在创建实例时填充它。这可以用于排序。从目前的情况看,你似乎在不知道自己在哪里、想去哪里的情况下跳过了问题。。提示:您很可能想切换到ListView。@RezaAghaei字母顺序对DatesHanks@jarednaszler不起作用。几乎可以工作,但不幸的是,它在列表框中填充了每个项目的多个实例…@JonnyAppleseed-它将在该文件夹中的每个文件中列出一个项目。是否只需要唯一的截止日期或其他信息?接收字符串未被识别为有效的日期时间。DateTime duedate=Convert.ToDateTimemat.ToString;出错;。。任何想法。。。在你的帮助下,我确实让它完美地工作了……你的每个约会都必须是00/00/0000。如果您的日期为2016年3月12日,日期为2016年4月15日,日期为2016年4月15日,日期为两位数,或上述任何组合,则您的正则表达式将不匹配。在调用regex.Match之后,可以检查mat.Success==true属性。如果不匹配,您将看不到列表框中列出的文件。@JonnyAppleseed-您是否可以使用它?如果没有,让我们结束这个问题并接受答案。否则,让我知道什么仍然不起作用,我们可以解决它。谢谢@jarednaszler。几乎可以工作,但不幸的是,它在列表框中填充了每个项目的多个实例…@JonnyAppleseed-它将在该文件夹中的每个文件中列出一个项目。是否只需要唯一的截止日期或其他信息?接收字符串未被识别为有效的日期时间。DateTime duedate=Convert.ToDateTimemat.ToString;出错;。。任何想法。。。在你的帮助下,我确实让它完美地工作了……你的每个约会都必须是00/00/0000。如果您的日期为2016年3月12日,日期为2016年4月15日,日期为2016年4月15日,日期为两位数,或上述任何组合,则您的正则表达式将不匹配。在调用regex.Match之后,可以检查mat.Success==true属性。如果不匹配,您将看不到列表框中列出的文件。@JonnyAppleseed-您是否可以使用它?如果没有,让我们结束这个问题并接受答案。否则,让我知道什么仍然不起作用,我们可以找出它。