C# 列表和foreach

C# 列表和foreach,c#,wpf,listview,foreach,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 =

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

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;
StorageFile file=wait roamingFolder.GetFileAsync(文件名);
string text=await FileIO.ReadTextAsync(文件);
字符串[]显示=text.Split(新的[]{:?;“},StringSplitOptions.None);
List showslist=新列表();
foreach(显示中的字符串拆分显示)
{
string[]show1=splitshow.Split(新的[]{“,?;”},StringSplitOptions.None);
插曲=show1[0];
name=show1[1];
添加(新节目{name=name,session=session});
}
Output.ItemsSource=showslist;
奇怪的是,只有当我将
Output.ItemsSource=showslist在foreach循环内部,但当它在外部时,我真的不明白为什么它不是。我的意思是列表中的元素已经被添加到了列表中,不是吗

我已经尝试了许多不同的方法,其中大多数方法即使它们确实显示列表数据有许多不同的问题,这些问题太混乱而无法修复


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

我敢打赌您的数据并不完全正确。我认为后面/最后一个条目之一抛出了一个异常,它在代码的更高层被吞没了(或者没有报告给记录器/UI)。在分配数据源之前,它永远不会完成
foreach
循环并退出该方法

我猜您的第二次拆分,其中一个条目实际上不包含分隔符
因此
show1
数组的长度仅为1,不包含“name”条目。当您尝试访问
show1[1]
时,它会抛出一个
索引自动失效异常

另外,我建议您研究使用更简单的分隔符,或者更好地使用某种形式的XML(或JSON或其他)序列化来读取数据

编辑:我从你在评论中发布的代码示例中看到,问题是最后一个条目。给定
hlj,?;lljhjh:?;嗯,嗯,,?;drr:?;面向对象,?;你好:?;ff,?;ff:
,您的第一个
字符串。对
执行拆分操作:
将生成一个空字符串作为最后一个条目。因此,当您尝试对
它按空进行拆分,并返回一个数组,其中一个条目为
String.empty
。点击
show1[1]
时会引发异常

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

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

如果您愿意,您可以添加一个类似于
If(show1.Length==2)
的检查,这样您就可以避免坏数据(但您可能更愿意报告它,以便修复它)。如果您的程序本身正在写入这些错误数据,也许您应该进行一些快速的单元测试,以确保您始终在写入/读取有效数据。

在调试时,foreach之后是否显示为空?呸。一定有更多的代码正在执行,但您没有向我们展示。这并不是说它看起来与您的问题有任何关系,而是为什么您要在立即等待的情况下执行异步操作?您只是将它们重新转换为同步操作。@ColinMackay-这比旧式的同步操作要好,因为1)代码可读,2)可以从UI线程调用此代码,而不会在I/O期间实际阻塞UI线程。异步的一个很好的用途是在其周围放置一个try/catch或检查日志记录。可能,可能,后面/最后一个条目中有一个正在抛出异常,并且该异常正在代码的更高层被吞没(或者没有报告给记录器/UI)。因此,它从未实际分配ItemSource或完成foreach循环?(例如,可能您的歌曲列表数据在第二次拆分时只生成一个元素,因此当您尝试访问它的
name=show[1]
时,它会抛出一个
索引AutoFrangeException
)只需彻底查看数据您是对的,最后的delimeter就是问题所在,这与您所说的差不多,谢谢你的帮助,谢谢你的建议,我会更多地研究它们,也许会使用其中的一个。