2017-04-27 64 views
1

我是新来的C#和这个问题可能听起来愚蠢...... 我正在编程一个播放音乐的机器人,当我发送一个命令时,我想创建某种循环来替换“if”但我不知道怎样还是怎样类型的循环......替换如果与循环

这是我的void函数读取从特定的.txt文件内容并播放歌曲顺序:https://pastebin.com/sPG1VtnN

出于测试目的,我做了一个.txt文件在第一行写上“MTJ Dream”:

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循环,但我sayd ...我是新来的C#和我不知道如何做这种情况下的foreach ...

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

+0

你可能需要的是一个Dictionary 而不是一个循环。您正在使用字符串来查找另一个字符串。 – wllmsaccnt

+0

我现在要做一个关于“Dictionary ”的研究,我会看看我是否可以用相同的结果重新编写代码,而如果语句少一些,谢谢^^ – Katt

回答

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(); 
    } 
} 
+1

感谢您的快速回答,您的代码是真的是我在找什么,谢谢! ^^ – Katt