web-dev-qa-db-ja.com

文字列をSystem.Net.IPAddressに変換する方法

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();
            }
        }

   }
13
user1608298

静的 IPAddress.ParsestringIPAddressに解析するメソッド:

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 を使用することを検討してください。

18
Oded

IPAddress.Parseメソッドは文字列を受け入れます。

foreach (string line in File.ReadAllLines("proxy.txt"))
{
    IPAddress ip = IPAddress.Parse(line);
    // ...
}
5
Steven Doggart
foreach (IPAddress ip in File.ReadAllLines("proxy.txt").Select(s => IPAddress.Parse(s))) {
    // ...
}
3
Richard

たとえば、IPAddress.Parseメソッドを使用できます。

private static void parse(string ipAddress)
  {
    try
    {
      IPAddress address = IPAddress.Parse(ipAddress);
    }
2
TrizZz

できることの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();
            }
        }
    }

これが役に立てば幸いです!

1
Jason Cidras

IPAddress.Parse を使用してそれを行うことができます。

1
Timbo