Search code examples
vb.netarrayssharednerddinner

How to create Shared VB Array Initialisors for NerdDinner


I am trying to work my way through the NerdDinner tutorial - and as an exercise I'm converting it to VB as I go. I'm not very far in and after having gotten past the C# Yield statement I'm stuck on Shared VB Array Initialisors.

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}$)")},

Can anyone please help me write this in VB?

Public Shared countryRegex As IDictionary(Of String, Regex) = New Dictionary(Of String, Regex)() {("USA", New Regex("^[2-9]\\d{2}-\\d{3}-\\d{4}$"))}

This code has an error as it does not accept the String and the Regex as an item for the array.

Thanks


Solution

  • I don't believe that VB9 supports collection initializers, although I think it will be in VB10.

    The simplest option is probably to write a shared method which creates and then returns the dictionary, and call that shared message from the variable initializer. So in C#, it would be:

    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;
    }
    

    Hopefully you'll find that easier to translate into VB :)