用循环替换If

时间:2017-04-27 00:18:18

标签: c#

我是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 ...

如果这个问题是重复的,请考虑向我发送您认为可以解决我的问题的问题!

1 个答案:

答案 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();
    }
}