2017-09-03 21 views
0

クリップボードからリンクを取得しようとしていますが、もしあればうまく動作しますが、クリップボードに1つ以上のリンクが保存されています。 は、私はすべてが文字列やブール値を返す理由を参照してくださいいけないクリップボードから適切に文字列を抽出するにはどうすればいいですか?

Cannot convert type 'char' to 'string'

このエラーが発生します。このエラーの原因とは何ですか?どのように解決しますか?

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

エラーを引き起こすのは、どの回線ですか? –

+0

1] 'clipboardText'はstring型ですので、' link'の型はcharであり、stringではありません。これはエラーを引き起こしているものです:* "型 'char'を 'string'に変換できません" * 2)なぜあなたは文字列をループしていますか?クリップボードに複数のリンクが保存されている場合は、それらを分割するためのセパレータが必要ですか? – adiga

+0

'clipboardText'は文字の配列を持つ文字列です。文字列の配列ではありません。 foreachループが正しくありません –

答えて

1

foreachループは、コレクションまたは配列をループします。 あなたの場合は、文字列をコレクション/配列として使用しています。それは幾分可能です。文字列をchar型の配列として想像してください。

あなたは、文字列の各文字によってのみループ、しかし、本当にあなたの問題を解決しませんでしょう

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

を使用することができます。

foreach-loopの詳細については、thisをご覧ください。

本当に必要なのは、リンクを格納するタイプ文字列の配列です。 私はあなたが区切り文字で分割し、それらの文字列を持っている想像|あなたはこのようにコードを修正することができるように、あなたのクリップボードに(のように「」):あなたが持っている場合は、例えば、

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

あなたのクリップボードに"https://softwareengineering.stackexchange.com|https://stackoverflow.com"を置くと、リンクが文字列の配列に分割され、それらを使って作業することができます。

デリミタを使用しないと、状況が少し複雑になることがあります。それらのリンクを手作業で文字列配列に分割し、その後にその配列をループする必要があります。

関連する問題