2016-05-17 5 views
-4

私のコードである "すべてのコードパスの戻りA値ではない":C#の - ユニークな私はここで<code>public static IPAddress</code></p> <p>を持っている問題

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 */ 
     } 

問題は、すべて私の可能コードパスが値を返しています。

私がしようとしているのは、ウェブサイトアドレスをインターネットプロトコルアドレスに解決することです(問題がある場合)。 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調整します。 –

関連する問題