15

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

   }
4

6 に答える 6

21

静的IPAddress.Parseメソッドを使用して a を に解析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スローされる例外を回避するために を使用することを検討してください。

于 2012-08-20T12:38:43.613 に答える
6

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

foreach (string line in File.ReadAllLines("proxy.txt"))
{
    IPAddress ip = IPAddress.Parse(line);
    // ...
}
于 2012-08-20T12:40:01.710 に答える
3
foreach (IPAddress ip in File.ReadAllLines("proxy.txt").Select(s => IPAddress.Parse(s))) {
    // ...
}
于 2012-08-20T12:39:00.970 に答える
2

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

private static void parse(string ipAddress)
  {
    try
    {
      IPAddress address = IPAddress.Parse(ipAddress);
    }
于 2012-08-20T12:38:43.317 に答える
1

できることの 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()) するか、文字列を IPAddress に 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();
            }
        }
    }

これが役立つことを願っています!

于 2014-06-24T13:16:26.363 に答える
1

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

于 2012-08-20T12:39:08.900 に答える