我是c#的新手,这个问题可能听起来很愚蠢...... 我正在编写一个在发送命令时播放音乐的机器人,我想创建某种循环来替换" if"但我不知道循环的方式或类型......
这是我的void函数,它从特定的.txt文件中读取内容并按顺序播放歌曲:https://pastebin.com/sPG1VtnN
出于测试目的,我创建了一个名为" MTJ Dream"的.txt文件。在第一行有这个:
songlist "Break The Walls" "Fools Gold" "Out Of My League" "The Walker"
.txt文件的名称等于特定路径上的文件夹,程序读取双引号内的所有内容,按顺序播放歌曲,并显示包含此代码上所有字符串的列表。 这是我的代码的这部分字符串列表,可能需要替换:
pONE: Content/config/teste/
pTWO: Content/config/teste/MTJ Dream.txt
line: songlist "Break The Walls" "Fools Gold" "Out Of My League" "The Walker"
binder1: "Break The Walls" "Fools Gold" "Out Of My League" "The Walker"
output1: Break The Walls
binder2: "Fools Gold" "Out Of My League" "The Walker"
output2: Fools Gold
binder3: "Out Of My League" "The Walker"
output3: Out Of My League
binder4: "The Walker"
output4: The Walker
我正在考虑编写一个foreach循环,但正如我所说...我是c#的新手,我不知道如何在这种情况下做一个foreach ...
如果这个问题是重复的,请考虑向我发送您认为可以解决我的问题的问题!
答案 0 :(得分:4)
这是您要遵循的模式。请注意,我没有测试此代码,可能会出错。这只是为了大致证明我认为你在做什么。
public static void Songlist(string fn)
{
filename = fn;
foldername = filename + '/';
pTWO = pONE + filename + ".txt";
using (var reader = new System.IO.StreamReader(pTWO))
{
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
if (line.StartsWith("songlist "))
{
var outputs = new List<string>();
// compile all the outputs
var position = 9;
while (position <= line.Length)
{
string lister = line.Remove(0, position);
string output = lister.Split('"', '"')[1];
outputs.Add(output);
position += (2 + output.Length + 1);
}
// iterate over all the outputs
foreach (var output in outputs)
{
if (Directory.Exists("Content/musics/" + foldername) && output != null && File.Exists("Content/musics/" + foldername + output + ".mp3"))
{
media.controls.stop();
media.URL = "Content/musics/" + foldername + output + ".mp3";
media.controls.play();
Console.WriteLine("media.controls.currentPosition :: " + media.controls.currentPosition);
Console.WriteLine("media.currentMedia.duration :: " + media.currentMedia.duration);
Thread.Sleep(TimeSpan.FromSeconds(3));
}
}
}
}
reader.Close();
}
}