Reputation: 345
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 https://web.archive.org/web/20090831053827/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
Upvotes: 3
Views: 660
Reputation: 1046
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
Upvotes: 2
Reputation: 12934
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
private readonly Product[] _products
-> Private ReadOnly _products As Product()
new[]
-> New ()
You Know What
Upvotes: 1