2015-07-30 4 views
1
Start: 
     if(fileName.Contains("$track")) 
      if(musicInfo.Tag.Track.ToString() != "") { 
       fileName.Replace("$track", musicInfo.Tag.Track.ToString()); 
      } 
      else { 
       switch(System.Windows.Forms.MessageBox.Show("Error: Track # missing from tag info", "Error", System.Windows.Forms.MessageBoxButtons.AbortRetryIgnore, System.Windows.Forms.MessageBoxIcon.Error)) { 
        case System.Windows.Forms.DialogResult.Abort: 
         fileName = "ABORTED"; 
         return fileName; 
        case System.Windows.Forms.DialogResult.Retry: 
         goto Start; 
        case System.Windows.Forms.DialogResult.Ignore: 
         fileName.Replace("$track", ""); 
       } 

      } 

Я не могу придумать лучшего способа написать это, было бы еще 7 блоков этого кода.Есть ли более эффективный способ кодирования этого?

+0

Я не уверен, что более эффективным, но 'goto' это ненавидела кусок кода для многих людей .. Это будет получить ваш пользователь застрявших в цикле также, если имя файла содержит трек и тег дорожка пуста, нажатие на повторную попытку просто приведет их к следующему сообщению для повторного повторения – Sayse

+0

Dino incoming ... http://i.stack.imgur.com/thuIW.png – Zelldon

+0

ehh должен ли я просто использовать его в цикле while? Я чувствую, что это просто добавит больше кода, я понимаю, что он переносит их в другую ячейку, которая предназначена для того, чтобы они могли добавлять какие-либо недостающие детали в тег и затем повторять попытку. – kenyunot

ответ

1

Как насчет этого?

public string GetFileName(string fileName) 
{ 
    if(fileName.Contains("$track") && 
    !String.IsNullOrEmpty(musicInfo.Tag.Track.ToString()) 
    { 
     return fileName.Replace("$track", musicInfo.Tag.Track.ToString()); 
    } 

    var userOption = System.Windows.Forms.MessageBox.Show(
    "Error: Track # missing from tag info", "Error", 
    System.Windows.Forms.MessageBoxButtons.AbortRetryIgnore, 
    System.Windows.Forms.MessageBoxIcon.Error) 

    switch(userOption) 
    { 
     case System.Windows.Forms.DialogResult.Abort: 
      return "ABORTED"; 
     case System.Windows.Forms.DialogResult.Retry: 
      return GetFileName(fileName); 
     case System.Windows.Forms.DialogResult.Ignore: 
      return fileName.Replace("$track", ""); 
    } 
} 
+0

Рекурсия здесь не подходит, – AlexD

+0

Вы правы, извлечение его другим способом должно быть лучше. – CarbineCoder

+0

У меня еще 7 блоков кода выше, вот ссылка: http://pastebin.com/W8RMh68F – kenyunot