C# 对数组列表中的数据进行排序

C# 对数组列表中的数据进行排序,c#,windows-phone-7,C#,Windows Phone 7,我有一个数组列表,包含格式为 2011年8月12日、2011年9月11日 我使用以下代码进行排序: Array.Sort(fileNames, delegate(string first, string second) { return DateTime.Compare(Convert.ToDateTime(first), Convert.ToDateTime(second)); }); 我从上面的代码得到的结果是 2011年9月11日、2011年8月12日 排序后,您说您的数据是“字符

我有一个数组列表,包含格式为

2011年8月12日、2011年9月11日

我使用以下代码进行排序:

Array.Sort(fileNames, delegate(string first, string second)
{

  return DateTime.Compare(Convert.ToDateTime(first), Convert.ToDateTime(second));
});
我从上面的代码得到的结果是

2011年9月11日、2011年8月12日

排序后,您说您的数据是“字符串的数组列表”-您的意思是

List<string> 
?

这对实现代码的方式有一点影响。假设您有一个实际的数组,那么代码非常简单,尽管不像我们希望的那样干净:

private void SortButton_Click(object sender, RoutedEventArgs e)
{
    ItemsListBox.ItemsSource = null;
    Array.Sort(items, delegate(string first, string second)
    {
        return DateTime.Compare(Convert.ToDateTime(first), Convert.ToDateTime(second));
    });
    ItemsListBox.ItemsSource = items;
}
但是,如果您正在处理一个名为“项”的列表,那么这种方法本身就不起作用。为了实现这一点,你必须处理一些事情:

private void SortButton_Click(object sender, RoutedEventArgs e)
{
    ItemsListBox.ItemsSource = null;
    var arrayOfItems = items.ToArray<string>();
    Array.Sort(arrayOfItems, delegate(string first, string second)
    {
        return DateTime.Compare(Convert.ToDateTime(first), Convert.ToDateTime(second));
    });
    items = new List<string>(arrayOfItems);
    ItemsListBox.ItemsSource = items;
}
private void SortButton_单击(对象发送方,路由目标)
{
ItemsListBox.ItemsSource=null;
var arrayOfItems=items.ToArray();
Sort(arrayOfItems,委托(字符串第一,字符串第二)
{
return DateTime.Compare(Convert.ToDateTime(第一个)、Convert.ToDateTime(第二个));
});
项目=新列表(arrayOfItems);
ItemsListBox.ItemsSource=项目;
}
类似,但不同:)由于排序正在进行,它实际上只是对数组进行排序,而不是对我们使用的实际列表进行排序

现在-注意在之前和之后清除ItemsSource。我玩了一会儿,但如果不同时执行这两个步骤,就无法让它正常工作。我认为这是数据绑定基础架构中的一个故障。我尝试使用字符串[]、列表和ObservableCollection,但每次都必须清除并重置ItemsSource以重新绘制列表框

您对Convert.ToDateTime()的评论对我来说似乎不是问题。我还尝试了DateTime.Parse(),效果也不错。问题在于ListBox.ItemsSource的清除和重新分配


有人知道ListBox为什么会这样吗?这是我刚刚忘记的简单的东西吗?

这在.NET 4/LINQPad中很好用——我使用的是Windows 7(不是电话)和英语语言环境(语言环境很重要)。可能要列出转换产生的日期时间,但它们可能不是预期的。(
Convert.ToDateTime(string)
非常努力地“只工作”,这可能不是期望的“工作”结果。)
private void SortButton_Click(object sender, RoutedEventArgs e)
{
    ItemsListBox.ItemsSource = null;
    var arrayOfItems = items.ToArray<string>();
    Array.Sort(arrayOfItems, delegate(string first, string second)
    {
        return DateTime.Compare(Convert.ToDateTime(first), Convert.ToDateTime(second));
    });
    items = new List<string>(arrayOfItems);
    ItemsListBox.ItemsSource = items;
}