c#/。net 3.5で文字列をSystem.Net、IPAddressに変換する方法
私はこれを試しましたが、このエラーが発生しました「タイプ 'string'を 'System.Net.IPAddress'に変換できません」
public void Form1_Load(object sender, EventArgs e)
{
IPHostEntry Host;
string localIP = "?";
Host = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ip in File.ReadAllLines("proxy.txt"))
{
if (ip.AddressFamily.ToString() == "InterNetwork")
{
localIP = ip.ToString();
textBox1.Text = ip.ToString();
}
}
}
静的 IPAddress.Parse
string
をIPAddress
に解析するメソッド:
foreach (var ipLine in File.ReadAllLines("proxy.txt"))
{
var ip = IPAddress.Parse(ipLine);
if (ip.AddressFamily.ToString() == "InterNetwork")
{
localIP = ip.ToString();
textBox1.Text = ip.ToString();
}
}
ファイルの行が常に有効なIPアドレスであるとは限らない場合は、例外がスローされないように TryParse
を使用することを検討してください。
IPAddress.Parse
メソッドは文字列を受け入れます。
foreach (string line in File.ReadAllLines("proxy.txt"))
{
IPAddress ip = IPAddress.Parse(line);
// ...
}
foreach (IPAddress ip in File.ReadAllLines("proxy.txt").Select(s => IPAddress.Parse(s))) {
// ...
}
たとえば、IPAddress.Parseメソッドを使用できます。
private static void parse(string ipAddress)
{
try
{
IPAddress address = IPAddress.Parse(ipAddress);
}
できることの1つはこれです... foreachループでは、コレクションに一致するインスタンスが必要です。つまり、たとえば、次のような文字列のリストがある場合、
List<string> lMyList
プログラマは、intまたはdoubleのインスタンスでこのリストを反復処理することはできません...
foreach (int lIterator in lMyList)
{ // code
}
これは単に機能せず、「int」が「string」のタイプではないという構文エラーがスローされます。
それを解決するには、このようなリストを反復処理する必要があります
foreach (string lIterator in lMyList)
{ // code
}
さて、あなたの質問に。 IPAddressは、独自のクラスとタイプです。単純にそれを文字列のタイプにすることはできません。ただし、これを回避する方法はいくつかあります。文字列を明示的にIPアドレスに変換します。ただし、最初にリストを反復処理する必要があります。
foreach (string lLine in File.ReadAllLines("proxy.txt"))
{
// Code In Here
}
これにより、テキストファイルのすべての行が繰り返されます。これはテキストファイルなので、文字列のリストを返します。文字列のリストを反復するために、プログラマはそれを反復する文字列ローカル変数を必要とします。
次に、現在の文字列をローカルIPアドレスインスタンスに解析する必要があります。これを行う方法はいくつかあります。1)文字列を単純に解析(System.Net.IPAddress.Parse())するか、文字列をIPアドレスにTryParse(IPAddress.TryParse())できます。
Method One:
// This will parse the current string instance to an IP Address instance
IPAddress lIPAddress = IPAddress(lLine);
Method Two:
IPAddress lIPAddress; // Local instance to be referenced
// At runtime, this will "Try to Parse" the string instance to an IP Address.
// This member method returns a bool, which means true or false, to say,
// "Hey, this can be parsed!". Your referenced local IP Address instance would
// have the value of the line that was parsed.
if (IPAddress.TryParse(lLine, out lIPAddress))
{
// Code
}
さて、今、私たちはそれを邪魔にならないようにしました。これで仕上げましょう。
// Iterates over the text file.
foreach (string lLine in File.ReadAllLines("proxy.txt"))
{
// Create a local instance of the IPAddress class.
IPAddress lIPAddress;
// Try to Parse the current string to the IPAddress instance.
if (IPAddress.TryParse(lLine, out lIPAddress))
{
// This means that the current line was parsed.
// Test to see if the Address Family is "InterNetwork"
if (string.Equals("InterNetwork", lIPAddress.AddressFamily.ToString()))
{
TextBox1.Text = lIPAddress.ToString();
}
}
}
これが役に立てば幸いです!
IPAddress.Parse を使用してそれを行うことができます。