2017-09-03 59 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"在剪贴板中,它会将链接拆分为字符串数组,您可以使用这些数组。

没有分隔符,事情可能会变得更棘手。然后,您必须首先手动将这些链接拆分为字符串数组,然后循环访问该数组。