2008-10-16 68 views
1

我对泛型(概念或语法)一般不太熟悉(缺少在集合中使用它们,什么不是),但我想知道以下是完成我想要的是。其实,在这种情况下,我不是完全正面的仿制药可以解决我的问题。VB.NET中的泛型函数

我建模和NHibernate的映射几十个对象,需要某种通用类的我CRUD操作,而不是创建为每种类型的一个单独的留存类的..如

Sub Update(someObject as Object, objectType as String) 
    Dim session As ISession = NHibernateHelper.OpenSession 
    Dim transaction As ITransaction = session.BeginTransaction 
    session.Update(ctype(someObject, objectType)) 
    transaction.Commit() 
End Sub 

哪里someObject可以是不同的类型。我知道这不是做这件事的最好方式(或者它甚至可以工作),但我希望有人能指引我走向正确的方向。

回答

2

这里的关键问题是:session.Update作为参数是什么?如果session.Update允许通用对象,然后我只是使用:

Sub Update(Of T)(ByVal someObject As T) 
    Dim session As ISession = NHibernateHelper.OpenSession 
    Dim transaction As ITransaction = session.BeginTransaction 
    session.Update(someObject) 
    transaction.Commit() 
End Sub 

这会通过流动的一般类型T到session.Update。

如果session.Update只需要一个对象,那么只需传入该对象;不需要CType。此外,如果objectType(string)只是当前对象的类型名称,那么首先使用someObject.GetType()会更好。