2010-07-26 7 views
1

어떻게 이것을 VB.net에서 C#으로 변환 할 수 있습니까? 온라인 변환기를 사용해 보았지만 프로젝트에 넣을 때 오류가 발생했습니다.VB.net Regex to C#

Dim regexinfo As String = String.Empty 
Dim p = "\[news\](?<info>.*?)\[/news\]" 
Dim Matches = Regex.Matches(response, p, RegexOptions.IgnoreCase Or RegexOptions.Singleline) 
If Matches IsNot Nothing AndAlso Matches.Count > 0 Then 
    For Each Match As Match In Matches 
     If Match.Groups("info").Success Then 
      regexinfo = (Match.Groups("info").Value) 
     End If 
    Next 
End If 
+0

오류에 관해 더 자세히 설명해 주실 수 있습니까? – siride

답변

6

"일치"변수는 문제의 원인이되는 유형과 동일한 이름의 변수라고 추측합니다. 그것은 단지 3 선 대신 10을, 비록

var p = @"\[news\](?<info>.*?)\[/news\]"; 
var Matches = Regex.Matches(response, p, RegexOptions.IgnoreCase | RegexOptions.Singleline); 
string regexinfo = Matches.LastOrDefault(m=>m.Groups("info").Success) ?? string.Empty; 

이 코드는 원래 VB.Net 기능적으로 동일 (그리고 쉽게 단지 1 수) : 이것은 당신이 원하는 일을해야한다.

예를 들어 Matches() 함수가 null 대신 빈 컬렉션을 반환하고 ?? string.Empty() 스 니펫이 찾을 수없는 대소 문자를 처리하므로 원본 코드의 "if"조건은 필요하지 않습니다. 따라서 코드가 변경 되더라도 동작은 변경되지 않았습니다. 이것은 C#과 VB의 관계가 아닙니다. VB.Net은 한 줄로도 처리 할 수 ​​있습니다. LastOrDefault() 대신 FirstOrDefault()을 사용하여 추가 개선을 원할 수 있습니다. 그것은 후자가 원본과 일치하고, 이전은 그렇지 않다는 것입니다.

+0

모든 [news] [news]마다 그것을하기 위해 필요합니다. 그래서 기본적으로 모든 것을 얻을 수 있습니다. [날짜] [내용] – xZerox

+0

@xzerox이 코드는 원본이 수행 한 작업을 수행했습니다. 변경해야하는 경우 새로운 문제입니다. 그것은 쉽지만, IEnumerable을 반환하고 .Select() 투영법을 사용하도록 변경하십시오. –