2009-06-29 8 views
1

Ich versuche, mich durch das NerdDinner-Tutorial zu arbeiten - und als Übung konvertiere ich es in VB, wie ich gehe. Ich bin nicht sehr weit und nachdem ich die C# Yield-Anweisung passiert habe, stecke ich auf Shared VB Array Initialisers fest.Wie erstellt man Shared VB Array Initialiser für NerdDinner

static IDictionary<string, Regex> countryRegex = 
new Dictionary<string, Regex>() { 
{ "USA", new Regex("^[2-9]\\d{2}-\\d{3}-\\d{4}$")}, 
{ "UK", new 
Regex("(^1300\\d{6}$)|(^1800|1900|1902\\d{6}$)|(^0[2|3|7|8]{1}[0- 
9]{8}$)|(^13\\d{4}$)|(^04\\d{2,3}\\d{6}$)")}, 
{ "Netherlands", new Regex("(^\\+[0-9]{2}|^\\+[0- 
9]{2}\\(0\\)|^\\(\\+[0-9]{2}\\)\\(0\\)|^00[0-9]{2}|^0)([0-9]{9}$|[0-9\\- 
\\s]{10}$)")}, 

Kann mir bitte jemand helfen, dies in VB zu schreiben?

Dieser Code weist einen Fehler auf, da er String und Regex nicht als Element für das Array akzeptiert.

Dank

Antwort

3

Ich glaube nicht, dass VB9 Auflistungsinitialisierer unterstützt, obwohl ich es will be in VB10 denken.

Die einfachste Option besteht wahrscheinlich darin, eine gemeinsam genutzte Methode zu schreiben, die das Wörterbuch erstellt und dann zurückgibt und diese freigegebene Nachricht vom Variableninitialisierer aus aufruft. Also in C#, wäre es:

static IDictionary<string, Regex> countryRegex = CreateCountryRegexDictionary(); 

static IDictionary<strnig, Regex CreateCountryRegexDictionary() 
{ 
    Dictionary<string, Regex>() ret = new Dictionary<string, Regex>(); 
    ret["USA"] = new Regex("^[2-9]\\d{2}-\\d{3}-\\d{4}$"); 
    // etc 
    return ret; 
} 

Hoffentlich werden Sie feststellen, dass leichter in VB zu übersetzen :)

+0

Dank Jon, ich dachte in diese Richtung, obwohl ich nicht soweit gekommen war, alles in eine Shared-Methode zu schreiben - ich überlegte gerade, der Klasse einen Konstruktor hinzuzufügen! Mein Fehler! Prost –

1

Meine VB Umwandlung der Vollständigkeit halber:

Public Shared Function GetIDictionary() As IDictionary(Of String, Regex) 
Dim countryRegex As IDictionary(Of String, Regex) = New Dictionary(Of String, Regex)() 
countryRegex("USA") = New Regex("^[2-9]\\d{2}-\\d{3}-\\d{4}$") 
countryRegex("UK") = New Regex("(^1300\\d{6}$)|(^1800|1900|1902\\d{6}$)|(^0[2|3|7|8]{1}[0-9]{8}$)|(^13\\d{4}$)|(^04\\d{2,3}\\d{6}$)") 
countryRegex("Netherlands") = New Regex("(^\\+[0-9]{2}|^\\+[0-9]{2}\\(0\\)|^\\(\\+[0-9]{2}\\)\\(0\\)|^00[0-9]{2}|^0)([0-9]{9}$|[0-9\\-\\s]{10}$)") 
Return countryRegex 
End Function 

Prost wieder Jon

1

Falls es irgendeinen Nutzen gibt, hier ist mein kompletter VB.Net NerdDinner PhoneValidator inkl. Großbritannien und Irland Handys

Public Class PhoneValidator 

    Private Shared Function GetIDictionary() As IDictionary(Of String, Regex) 
     Dim countryRegex As IDictionary(Of String, Regex) = New Dictionary(Of String, Regex)() 
     countryRegex("USA") = New Regex("^[2-9]\\d{2}-\\d{3}-\\d{4}$") 
     countryRegex("UK") = New Regex("(^1300\\d{6}$)|(^1800|1900|1902\\d{6}$)|(^0[2|3|7|8]{1}[0-9]{8}$)|(^13\\d{4}$)|(^04\\d{2,3}\\d{6}$)") 
     countryRegex("Netherlands") = New Regex("(^\\+[0-9]{2}|^\\+[0-9]{2}\\(0\\)|^\\(\\+[0-9]{2}\\)\\(0\\)|^00[0-9]{2}|^0)([0-9]{9}$|[0-9\\-\\s]{10}$)") 
     countryRegex("Ireland") = New Regex("^((07|00447|\+447)\d{9}|(08|003538|\+3538)\d{8,9})$") 
     ' 
     Return countryRegex 
    End Function 

    Public Shared Function IsValidNumber(ByVal phoneNumber As String, ByVal country As String) As Boolean 

     If country IsNot Nothing AndAlso GetIDictionary.ContainsKey(country) Then 
      Return GetIDictionary(country).IsMatch(phoneNumber) 
     Else 
      Return False 
     End If 
    End Function 

    Public ReadOnly Property Countries() As IEnumerable(Of String) 
     Get 
      Return GetIDictionary.Keys 
     End Get 
    End Property 

End Class 
+0

Prost Leo, ich bin sicher, es wird nützlich sein! –