2017-01-10 1 views
-1

У меня есть следующий код:Как сделать лучшее кодирование этого кода

string name1; 
string name2; 
string name3; 

try 
{ 
    name1 = htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name1']").GetAttributeValue("value", ""); 
    name2 = htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name2']").GetAttributeValue("value", ""); 
    name3 = htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name3']").GetAttributeValue("value", ""); 
} 
catch(Exception) 
{ 
    name1 = ""; 
    name2 = ""; 
    name3 = ""; 
} 

Даже думал, что я не мог найти случай, есть шанс, что узел не найден, и функция SelectSingleNode() возвращает нуль , Но если одна из них дает ошибку, все три строки будут пусты. Я мог бы решить ее, как код ниже, но мне не нравится называть 3 try/catch в такой последовательности, есть ли лучший способ сделать это?

try 
{ 
    name1 = htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name1']").GetAttributeValue("value", ""); 
} catch (Exception) 
{ 
    name1 = ""; 
} 

try 
{ 
    name2 = htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name2']").GetAttributeValue("value", ""); 
} catch (Exception) 
{ 
    name2 = ""; 
} 

try 
{ 
    name3 = htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name3']").GetAttributeValue("value", ""); 
} catch (Exception) 
{ 
    name3 = ""; 
} 

ответ

0

Проверьте следующее решение может вам помочь.

 try { 
     if (null != htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name1']") && null != htmlDoc.DocumentNode 
       .SelectSingleNode("//input[@name='name1']").GetAttributeValue("value", "")) { 
      name1 = htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name1']").GetAttributeValue("value", ""); 
     } else { 
      name1 = null; 
     } 

     if (htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name2']") && null != htmlDoc.DocumentNode 
       .SelectSingleNode("//input[@name='name2']").GetAttributeValue("value", "")) { 
      name2 = htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name2']").GetAttributeValue("value", ""); 
     } else { 
      name2 = null; 
     } 

     if (htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name3']") && null != htmlDoc.DocumentNode 
       .SelectSingleNode("//input[@name='name3']").GetAttributeValue("value", "")) { 
      name3 = htmlDoc.DocumentNode.SelectSingleNode("//input[@name='name3']").GetAttributeValue("value", ""); 
     } else { 
      name3 = null; 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    }