views:

92

answers:

3

can someone help me pls, im new to vb.net and im trying to work through the nhibernate firstsolution sample (written in c# re-posted here http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/04/01/your-first-nhibernate-based-application.aspx as thier site is down again) and im struggling to convert this one bit. ive tried numerous convertors; telerik, developerfusion and a several others but none of the code produced will compile and i cant see the why...

if you search for this method youll find where im upto...

private readonly Product[] _products = new[] 
{
    new Product {Name = "Melon", Category = "Fruits"},
    new Product {Name = "Pear", Category = "Fruits"},
    new Product {Name = "Milk", Category = "Beverages"},
    new Product {Name = "Coca Cola", Category = "Beverages"},
    new Product {Name = "Pepsi Cola", Category = "Beverages"},                 
};

' just the next part of the tutorial, ive resolved the "var" in vb.net 2005 bit np
private void CreateInitialData()        
{
    using(ISession session = _sessionFactory.OpenSession())                
        using(ITransaction transaction = session.BeginTransaction())                  
        {
           foreach (var product in _products)
               session.Save(product);
               transaction.Commit();
        }
}

since my c# and vb are both shakey at best ive tried to use several conversion utils/sites.

developer fusion gives:

Private ReadOnly _products As Product() = New () {New Product(), New Product(), New Product(), New Product(), New Product()}

telerik gives

Private ReadOnly _products As Product() = New () {New Product() With { _
 .Name = "Melon", _
 .Category = "Fruits" _
}, New Product() With { _
 .Name = "Pear", _
 .Category = "Fruits" _
}, New Product() With { _
 .Name = "Milk", _
 .Category = "Beverages" _
}, Nw Product() With { _
 .Name = "Coca Cola", _
 .Category = "Beverages" _
}, New Product() With { _
 .Name = "Pepsi Cola", _
 .Category = "Beverages" _
}}

which seems the most useful except it complains about a type expected here "New () {..." ive tried various things including the missing type in the New() as suggested in the comments but just cant figure it out... what am i missing? am i just being dumb? or isnt there and equivilent?

This is all the code i have, as it is a simple copy n paste from the tutorial c# to the convertor sites. in the mean time ive used the developer fusion definition and manually populated the array elements in aother method. i.e.

Private _products As Product() = {New Product(), New Product(), New Product(), New Product(), New Product()}
Private Sub CreateInitialData()
    ' =================
    ' since i couldnt figure out how to convert the initialisation of the 
    ' "_products" array/collections whatever it is, i cheated and did this, 
    ' seems to work ok though probably poor practice
    With _products(0)
        .Name = "Melon"
        .Category = "Fruits"
    End With
    ' etc....
End Sub

background if it matters: vs2005, .net 2.0

Cheers all

+1  A: 

Try this:

Private ReadOnly _products() as Product = 
{ 
    New Product() With {.Name = “Melon″, .Category = "Fruits"},
    ...
}

P.S: The problem is with your original c# code. It has to be private readonly Product[] _products = new Product[]

Due to this, the conversion is split into three parts

  1. private readonly Product[] _products -> Private ReadOnly _products As Product()
  2. new[] -> New ()
  3. You Know What
Veer
hmm ok, have tried that and its now complaining about the first "With" statement expecting a "}"is this by change a version thing? im using vs2005 and dotnet2.0 and i suspect the original c# im converting from is vs2008 and 3.0 as its got "var" in a few places. excuse the probable confusion about dotnet/c# version im not 100% on whats what...
Matma
can you post your code because you've another syntax in your c# code ie, the last comma after Beverages
Veer
ive updated the OP with everything i have though not much more than before, possibly a bit clearer but thats about all...
Matma
+1  A: 

There is no elegant equivalent in VB8 (VS 2005) for this.

David Anton
+1  A: 

VB.NET 8.0/Visual Studio 2005 does not support use of the With statement for direct object initialization. However, I believe you should be able to encapsulate the initialization in a Function:

    Private ReadOnly _products() As Product = BuildProducts()

    Private Function BuildProducts() As Product()
        Dim products(4) As Product

        Dim product0 As New Product
        With product0
            .Name = "Melon"
            .Category = "Fruits"
        End With

        Dim product1 As New Product
        With product1
            .Name = "Pear"
            .Category = "Fruits"
        End With

        Dim product2 As New Product
        With product2
            .Name = "Milk"
            .Category = "Beverages"
        End With

        Dim product3 As New Product
        With product3
            .Name = "Coca Cola"
            .Category = "Beverages"
        End With

        Dim product4 As New Product
        With product4
            .Name = "Pepsi Cola"
            .Category = "Beverages"
        End With

        products(0) = product0
        products(1) = product1
        products(2) = product2
        products(3) = product3
        products(4) = product4

        Return products
    End Function
Technobabble
This seems to be the answer, not enough rep to vote up but this is pretty much the solution i went with short term (not knowing any better). Thanks All.
Matma
Glad it worked for you.
Technobabble