web-dev-qa-db-fra.com

comment convertir une chaîne en System.Net.IPAddress

comment puis-je convertir une chaîne en System.Net, IPAddress in C # /. Net 3.5

j'ai essayé ceci mais j'ai eu cette erreur "Impossible de convertir le type 'chaîne' en '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();
            }
        }

   }
11
user1608298

Utilisez la méthode statique IPAddress.Parse pour analyser une string dans une 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();
    }
}

Si les lignes du fichier ne sont pas toujours des adresses IP valides, vous pouvez envisager d'utiliser TryParse pour éviter toute exception.

16
Oded

La méthode IPAddress.Parse accepte une chaîne.

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

Vous pouvez utiliser la méthode IPAddress.Parse Par exemple:

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

Une chose que vous pouvez faire est la suivante ... Dans la boucle foreach, vous avez besoin d’une instance qui correspond à votre collection. Ce que je veux dire, c'est que si vous avez, par exemple, vous avez une liste de chaînes, comme celle-ci:

    List<string> lMyList    

Un programmeur ne peut pas parcourir cette liste avec une instance d'int ou de double ...

    foreach (int lIterator in lMyList) 
    { // code 
    }

Cela ne fonctionnera tout simplement pas et générera une erreur de syntaxe à propos d'un "int" qui n'est pas un type de "chaîne".

Pour résoudre ce problème, vous devrez parcourir votre liste comme ceci

    foreach (string lIterator in lMyList)
    { // code
    }

Maintenant, à votre question. Une adresse IP est sa propre classe et son propre type. On ne peut pas simplement en faire un type de chaîne. Cependant, il existe des moyens de contourner ce problème. Convertir explicitement une chaîne en une adresse IP. Mais, vous devrez d'abord parcourir votre liste.

    foreach (string lLine in File.ReadAllLines("proxy.txt"))
    {
        // Code In Here
    }

Cela va parcourir toutes les lignes du fichier texte. Puisqu'il s'agit d'un fichier texte, il retourne une liste de chaînes. Pour pouvoir parcourir une liste de chaînes, un programmeur a besoin d'une variable locale de chaîne pour l'itérer.

Ensuite, vous devrez analyser la chaîne en cours en une instance d’adresse IP locale. Il y a plusieurs façons de procéder: 1) Vous pouvez simplement analyser la chaîne (System.Net.IPAddress.Parse ()) ou essayer TryParse (IPAddress.TryParse ()) dans une chaîne IPAddress.

    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
    }

Ok, maintenant nous avons réussi à le régler. Permet de terminer cela.

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

J'espère que ça aide!

1
Jason Cidras

Vous pouvez utiliser IPAddress.Parse pour le faire.

1
Timbo