2016-05-17 25 views
-4

我有一個public static IPAddressC# - 獨特的「並非所有的代碼路徑返回一個值」的問題

這裏是我的代碼:

try { 
      IPAddress[] addresslist = Dns.GetHostAddresses(Website); 

      foreach (IPAddress theaddress in addresslist) 
      { 
       return theaddress; 
      } 
     } 
     catch 
     { 
      return IPAddress.Parse("Invalid Website!"); 
      /* dont worry about the line of code above this */ 
     } 

的問題是我所有的可能的代碼路徑返回一個值。

我想要做的是將網站地址解析爲Internet協議地址,如果這很重要。我不確定Try,Catch,Finally方法是否可以解決這個問題,如果Try,Catch,Finally方法能夠解決這個問題,我將如何使用它?在此先感謝:)

+9

實際上並不是所有的返回路徑都這樣。如果'addresslist'是空的,它不會返回一個值。 – scrappedcola

+0

如果'addresslist'爲空,該怎麼辦? –

+2

您不處理列表爲空的默認設置。另外,foreach是沒有意義的,因爲無論如何你都會返回第一個值。 – ManoDestra

回答

-1

這是一種方法來做到這一點。你有probløem是編譯不知道如果Dns.GetHostAddresses(Website)回報new IPAddress[0]或不

try 
{ 
    IPAddress[] addresslist = Dns.GetHostAddresses(Website); 

    foreach (IPAddress theaddress in addresslist) 
    { 
     return theaddress; 
    } 
} 
catch 
{ 
    return IPAddress.Parse(DefaultIP); 
} 

return null; 

更好的解決方案一起根據你的代碼。

try 
{ 
    IPAddress[] addresslist = Dns.GetHostAddresses(Website); 
    return addresslist.FirstOrDefault(); 
} 
catch 
{ 
    return IPAddress.Parse(DefaultIP); 
} 

或者如果你的foorloop做了一些神奇的事情,只是拋出並捕獲空列表。

try 
{ 
    IPAddress[] addresslist = Dns.GetHostAddresses(Website); 
    if(!addresslist.Any()) 
    { 
     //Since you promise that it will never be empty then this is a exceptionable offence. 
     throw new Exception("Host address list is empty"); 
     //But a simpler solution is just to return something. 
    } 
    foreach (IPAddress theaddress in addresslist) 
    { 
     return theaddress; 
    } 
} 
catch 
{ 
    return IPAddress.Parse(DefaultIP); 
} 
+0

嘗試將該字符串解析爲IPAddress時會發生什麼?我認爲這需要糾正。 – ManoDestra

+1

那麼,它不在問題的範圍內,但我會調整。 –

0

因爲它看起來像你只用一個單一的IPAddress

返回類型,返回的第一個項目你可以這樣做:

try 
{ 
    return Dns.GetHostAddresses(Website).FirstOrDefault(); 
} 
catch(Exception x) 
{ 
    throw new Exception("Invalid website", x); 
} 

如果設置恰好每一個是Empty它只會返回null。或者如果你想讓它在未找到的情況下拋出異常。

try 
{ 
    return Dns.GetHostAddresses(Website).First(); 
} 
catch(InvalidOperationException iox) 
{ 
    throw new Exception("IP list was empty", iox); 
} 
catch(Exception x) 
{ 
    throw new Exception("Invalid website", x); 
} 
+0

這是迄今爲止最好的答案。簡單而優雅。好工作:) – ManoDestra

+1

'Dns.GetHostAddresses(網站)'也可能會拋出異常..... – Eser

+0

@Eser true我會調整。 –

相關問題