2017-02-16 4 views
0

Мне нужно посмотреть, доступен ли путь, но только во время выполнения. Поэтому, если моя программа проверила, что файл не существует, он устанавливает для invalidPath bool значение «true», чтобы он не пересказывал запрос «File.Exists ...» еще раз, как только программа запускается.C# - Избегание повторения кода: Вложенный, если Statement

Проблема: если я делаю это так, как показано ниже, я не вижу возможности избежать избыточности кода. Мне нужно показать сообщение, чтобы информировать пользователя о недостающем файле, но не очень элегантно использовать одну и ту же строку кода для обоих случаев «если».

private bool invalidPath = false 

if (!invalidPath) 
    { 
     if (File.Exists(temp)) 
     { 
      //do code    
     } 
     else 
     { 
      Show.MessageBox("no file found") 
      invalidPath = true 
     } 
    } 
    else 
    { 
     Show.Messagebox("no file found") /*<---thats redundant*/ 
    } 

Надеюсь, кто-то может дать мне представление.

ответ

1

Есть ли причина, по которой вы не хотите комбинировать логические операторы в одном блоке if?

т.е.

private bool invalidPath = false 

if (!invalidPath && File.Exists(temp)) { 
    //do code    
} 
else { 
    Show.MessageBox("no file found") 
    invalidPath = true 
} 
+0

Если я объединить эти два заявления, программа/метод будет искать файл каждый раз, когда она вызывается (либо неправильными и правильными путями), и вот что я пытаюсь предотвратить, потому что при поиске файла все время стоило бы лишнего времени выполнения. – Klunky

+0

@ Klunky фактически, если первое условие не выполняется, следующие условия даже не будут оцениваться. это называется «короткое замыкание». вы можете прочитать больше здесь: https://msdn.microsoft.com/en-us/library/2a723cdk(v=vs.71).aspx – omerkarj

+0

О, я не знал (у меня нет такого опыта в C# /.СЕТЬ). Это очень полезно. Он уменьшает один оператор if и не требует дополнительных переменных. Это идеально для меня, спасибо! – Klunky

0

Вы не можете использовать один булевы держать как информацию (Path проверяется и существует файл). Таким образом, вы должны использовать второе логическое значение.

псевдо-код будет выглядеть следующим образом:

bool valid = false; 
bool checked = false; 

if(!checked) 
{ 
    valid = File.Exists("bla"); 
    checked = true; 
} 

if(!valid) 
{ 
    MessageBox("Path does not exist"); 
} 

Однако, ваша стратегия может иметь проблемы. Например, пользователь может удалить или переименовать путь во время работы вашей программы.

2

Попробуйте это:

  bool invalidPath = false; 
      bool fileExistsflag = false;    
      if (!invalidPath) 
      { 
       if (File.Exists(temp)) 
       { 
        //do code 
        fileExistsflag = true; 
       } 
       else 
       { 
        invalidPath = true; 
       } 
      } 
      if (!fileExistsflag || invalidPath) 
      { 
       MessageBox.Show("no file found"); 
      } 
+1

Кажется, мне нужно сделать еще один bool. Спасибо, я доволен этим решением. – Klunky

+0

Отлично. :) Пожалуйста, отметьте это как ответ, если вы найдете это правильным решением. благодаря – Aditi

Смежные вопросы