2010-07-26 8 views
1

Comment est-ce que je convertirais ceci en C# de VB.net. J'ai essayé les convertisseurs en ligne mais j'ai eu des erreurs quand je l'ai mis dans mon projet.VB.net Regex à 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

Pouvez-vous être plus précis concernant les erreurs que vous avez? – siride

Répondre

6

Je suppose que c'est la variable "Match" nommée comme son type qui cause des problèmes. Cela devrait faire ce que vous voulez:

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; 

Ce code est fonctionnellement équivalent à votre VB.Net d'origine, bien que ce soit seulement 3 lignes au lieu de 10 (et il pourrait facilement être juste 1). Par exemple, la condition "if" dans le code d'origine n'était pas nécessaire, car la fonction Matches() retourne une collection vide plutôt que null et l'extrait ?? string.Empty() prend en charge le cas non trouvé. Donc, même si le code a changé, le comportement n'a pas changé. Ce n'est pas une chose C# vs VB, cependant; VB.Net pourrait le faire en une ligne aussi bien. Vous pouvez apporter une amélioration supplémentaire en utilisant FirstOrDefault() plutôt que LastOrDefault(). C'est juste que ce dernier correspond à vous original et ancien ne le fait pas.

+0

J'en ai besoin pour toutes les [nouvelles] [/ nouvelles], donc je peux tout faire entre les deux. [affiche] [/ poster] [date] [/ date] [content] [/ content] – xZerox

+0

@xzerox Ce code a fait ce que votre original a fait. Si vous avez besoin de changer cela, c'est un nouveau problème. C'est assez facile à faire, il suffit de le changer pour retourner un IEnumerable et utiliser une projection .Select(). –