2017-09-03 1 views
0

클립 보드에서 링크를 가져 오려고합니다. 클립 보드가 있으면 링크를 잘 처리 할 수 ​​있지만 내 방법이 조금 바뀌 었습니다. 내 클립 보드에 두 개 이상의 링크가 저장되었습니다. 나는올바르게 클립 보드에서 문자열을 추출하는 방법

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"을 삽입하면 링크가 문자열 배열로 분할되므로 해당 링크로 작업 할 수 있습니다.

구분 기호가 없으면 상황이 좀 더 까다로울 수 있습니다. 그런 다음 해당 링크를 먼저 수동으로 문자열 배열로 분할하고 나중에 해당 배열을 반복해야합니다.

관련 문제