当我只是调用该函数并播放文件时,这是有效的,但是如果我想从文件夹中选择一个随机mp3播放它就会停止说“索引超出了数组的范围”。
任何人都可以发现错误吗?
public void playrandomsound()
{
if (mp3 != null)
{
mp3.Dispose();
}
var files = new DirectoryInfo(Application.StartupPath).GetFiles(".mp3");
int index = new Random().Next(0, files.Length);
string filename = files[index].Name.ToString(); <-- App stops here
string tune = string.Concat(Application.StartupPath, "//", fiilename);
mp3 = new Audio(tune);
mp3.Play();
}
如果我在错误行上删除了“tostring”方法,它仍会给出相同的错误。
答案 0 :(得分:3)
像Skurmedel所说,你需要防止空集合。但是,你遇到这个问题的原因是你的集合中没有任何.mp3文件。另一个错误在于:.GetFiles(".mp3")
。你的意思是.GetFiles("*.mp3")
。
答案 1 :(得分:1)
ToString
不是您的问题,您正在尝试访问阵列中不存在的位置。
我不知道你的数组在测试运行中包含了什么,但我看到了可能的罪魁祸首。如果文件为空且长度为零,该怎么办?意味着没有找到文件?您将从随机数生成器获得0并尝试在空数组中访问位置零。
通过检查files.Length < 1
(或files.Length == 0
)是否可以轻松避免这种情况,如果是的话,可以保释。