2017-09-03 4 views
0

Alors j'essaie d'obtenir les liens du presse-papiers, je parviens à le faire très bien si j'en ai un mais j'ai changé ma méthode un peu parce que disons que j'ai plus d'un lien enregistré dans mon presse-papiers. Je reçois cette erreurComment puis-je extraire correctement une chaîne du presse-papiers?

Cannot convert type 'char' to 'string'

Je ne vois pas pourquoi, tout retourne une chaîne ou un bool. Quelle est l'origine de cette erreur et comment puis-je la résoudre?

if (Clipboard.ContainsText(TextDataFormat.Text)) 
{ 
    string clipboardText = Clipboard.GetText(TextDataFormat.Text); 
    foreach (string link in clipboardText) 
    { 
     if (Uri.TryCreate(link, UriKind.Absolute, out var uri)) 
     { 
      rtbLinks.AppendText(uri + "\n"); 
     } 
    } 
} 
+0

Quelle ligne provoque l'erreur? –

+0

1] 'clipboardText' est de type string, donc le type' link' est char et pas de chaîne. C'est ce qui provoque l'erreur: * "Impossible de convertir le type 'char' en 'string'" * 2] Pourquoi faites-vous une boucle dans une chaîne? Si vous avez plus d'un lien enregistré dans le presse-papiers, vous devez avoir un séparateur pour les séparer? – adiga

+0

'clipboardText' est une chaîne comportant un tableau de caractères. Pas un tableau de chaînes. Votre boucle foreach n'est pas correcte cause de cela –

Répondre

1

Une boucle foreach boucle à travers une collection ou une matrice. Dans votre cas, vous utilisez la chaîne en tant que collection/tableau. C'est un peu possible. Imaginez une chaîne comme un tableau de type char.

Vous pouvez utiliser

foreach (char link in clipboardText) 
{ 
    if (Uri.TryCreate(link, UriKind.Absolute, out var uri)) 
    { 
     rtbLinks.AppendText(uri + "\n"); 
    } 
} 

Cela ne ferait que la boucle à travers chaque caractère de la chaîne, cependant, et ne résout pas vraiment le problème.

Jetez un oeil à this pour plus d'informations sur la boucle foreach.

Ce dont vous avez vraiment besoin, c'est d'un tableau de type string, où vous stockez les liens. J'imagine que vous avez ces chaînes séparées par un délimiteur (comme « | ») dans votre presse-papiers, vous pouvez modifier votre code comme ceci:

if (Clipboard.ContainsText(TextDataFormat.Text)) { 
    string[] clipboardText = Clipboard.GetText(TextDataFormat.Text).Split('|'); 
    foreach (string link in clipboardText) { 
     if (Uri.TryCreate(link, UriKind.Absolute, out var uri)) { 
      rtbLinks.AppendText(uri + "\n"); 
     } 
    } 
} 

Si vous avez, par exemple "https://softwareengineering.stackexchange.com|https://stackoverflow.com" dans votre presse-papiers, il va diviser les liens dans le tableau de la chaîne et vous pouvez travailler avec ceux-ci.

Sans délimiteur, les choses pourraient être un peu plus compliquées. Vous devez ensuite diviser manuellement ces liens dans le tableau de chaînes, puis faire une boucle dans ce tableau.