列表和foreach

时间:2012-12-31 15:07:28

标签: c# wpf listview foreach

我似乎有一个非常奇怪的问题,我真的不知道发生了什么。这是我正在尝试调试的源代码

StorageFile file = await roamingFolder.GetFileAsync(filename);
string text = await FileIO.ReadTextAsync(file);

string[] shows = text.Split(new[] { ":?;" }, StringSplitOptions.None);
List<show> showslist = new List<show>();

foreach (string splitshow in shows)
{
    string[] show1 = splitshow.Split(new[] { ",?;" }, StringSplitOptions.None);
    episode = show1[0];
    name = show1[1];

    showslist.Add(new show { name = name, episode = episode });
}

Output.ItemsSource = showslist;

奇怪的是,只有当我将Output.ItemsSource = showslist;置于foreach循环内部时才会显示该列表,但是当它在外部时却不会显示,我真的不明白它为什么不是。我的意思是列表的元素已经添加到它没有了吗?

已经尝试了很多不同的方法,其中大多数方法即使它们确实显示列表数据有许多不同的问题,太复杂,无法解决。

无论如何,感谢任何提示或帮助,谢谢。

1 个答案:

答案 0 :(得分:9)

我敢打赌你的数据不完全正确。我认为后一个/最后一个条目之一是抛出一个异常,它被吞没到你的代码中(或者没有报告给你的记录器/ UI)。它永远不会完成foreach循环并退出方法,然后才能分配数据源。

我猜你的第二次拆分,其中一个条目实际上并不包含你的分隔符,?;所以show1数组的长度只有1,并且不包含“name”条目。当您尝试访问show1[1]时,会抛出IndexOutOfRangeException

顺便说一下,我可以建议您使用更简单的分隔符进行调查,或者更好的是,使用某种形式的XML(或JSON或其他)序列化来读取数据。

编辑:我在您的评论中看到您发布的代码示例,问题是最后一个条目。给定hlj,?;lljhjh:?;hhmm,?;drr:?;oo,?;hello:?;ff,?;ff:?;String.Split上的第一个:?;操作将产生一个空字符串作为最后一个条目。因此,当您尝试对,?;执行第二次拆分时,它会拆分为空并返回一个带有String.Empty条目的数组。点击show1[1]时会抛出异常。

如果您将第一次拆分更改为使用StringSplitOptions.RemoveEmptyEntries,则应删除空条目:

string[] shows = text.Split(new[] { ":?;" }, StringSplitOptions.RemoveEmptyEntries);

如果您愿意,可以添加if (show1.Length == 2)之类的支票,然后就可以避免错误的数据(但也许您更愿意报告,以便您可以修复它)。如果您的程序本身正在编写这些错误的数据,也许您应该进行一些快速的单元测试,以确保您始终在写/读取有效数据。