LINQを使用して結果をフィルター処理できます。
Dim ipHostEntry = Dns.GetHostEntry(Dns.GetHostName)
Dim ipAddress = ipHostEntry.AddressList.FirstOrDefault(Function(ip) ip.AddressFamily = AddressFamily.InterNetwork)
If ipAdress IsNot Nothing Then
' Output ipAdress.ToString()
Else
' No IPv4 address could be retrieved
End If
説明:
インターフェイスを実装する をIPHostAddress.AddressList
返すため、LINQ 式で列挙できます。Array(Of IPAddress)
IEnumerable
FirstOrDefault
の最初で唯一のパラメータとして送信された述語ラムダ関数に一致する AddressList 配列から最初の要素を返しますFirstOrDefault
。ブール値を返すように述語関数を作成する必要があります。
配列は最初の要素から最後の要素まで反復され、要素ごとにラムダ関数が評価されます。そのパラメーターip
は現在の反復項目です。ip.AddressFamily = AddressFamily.InterNetwork
現在の項目が IPv4 アドレスであるかどうかを判断します。その場合、式が評価されtrue
、項目が によって返されFirstOrDefault
ます。と評価された場合false
、配列の次の項目がチェックされます。述語に一致する要素がない場合FirstOrDefault
は、デフォルト値を返します。この場合Nothing
(注意: 拡張First
機能は同じように機能しますが、述語に一致する項目がない場合は例外をスローします。両方ともFirst
、FirstOrDefault
引数なしで呼び出すことができ、それらは次の最初の要素を返します。シーケンス)。
私は上記の拡張メソッド ベースの表記法を好みますが、必要に応じて元のFrom In Where Select
LINQ 表記法を使用することもできます。
Dim ipAddress = (From ip In ipHostEntry.AddressList
Where ip.AddressFamily = AddressFamily.InterNetwork
Select ip)(0)
(0)
この場合、は別の拡張メソッドの引数であることに注意してくださいElementAtOrDefault(index As Integer)
。