2017-09-03 60 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'是字符串類型的,所以'link'的類型是char而不是字符串。這是導致錯誤的原因:*「不能將類型'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"); 
    } 
} 

這將只能通過字符串的每個字符循環,不過,不會真正解決您的問題。

查看this瞭解更多關於foreach循環的信息。

你真正需要的是一個字符串類型的數組,你在這裏存儲鏈接。 我想你有一個分隔符拆分這些字符串(如「|」)在您的剪貼板,這樣你就可以修改你的代碼是這樣的:如果你有

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"在剪貼板中,它會將鏈接拆分爲字符串數組,您可以使用這些數組。

沒有分隔符,事情可能會變得更棘手。然後,您必須首先手動將這些鏈接拆分爲字符串數組,然後循環訪問該數組。