2008-10-16 71 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()會更好。