VB.NET中的通用函数

时间:2008-10-16 00:15:53

标签: vb.net nhibernate generics

我一般不熟悉泛型(概念或语法)(在集合中不使用它们而不是在集合中),但我想知道以下是否是实现我想要的最佳方式。实际上,在这种情况下,我并不完全是积极的仿制药会解决我的问题。

我已经在NHibernate中建模并映射了几十个对象,并且需要某种通用类来进行我的CRUD操作,而不是为每种类型创建一个单独的persister类...例如

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可以是不同的类型。我知道这不是最好的方式(或者它甚至可以工作),但我希望有人能引导我朝着正确的方向前进。

1 个答案:

答案 0 :(得分: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()。