[VB 2005]Cast su Generics

mercoledì 26 agosto 2009 - 17.48

Teech Profilo | Expert

Ho 2 classi delle quali una generica che vorrei usare per la gestione di DataTable tipizzati (ometto del codice per maggiore leggibilità)
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Uso queste classi nel seguente modo:
Public Class Account Inherits TypedDataRow Implements IAccount Private _table As AccountsTable Sub New(ByVal builder As System.Data.DataRowBuilder) MyBase.New(builder) Me._table = CType(Me.Table, AccountsTable) End Sub End Class Friend Class AccountsTable Inherits TypedDataTable(Of Account) Sub New(ByVal TableName As String) MyBase.New(TableName) End Sub Protected Friend Sub New() MyBase.New("Conti") End Sub End Class

Mi sono creato anche un Adapter personalizzato che popola attraverso una funzione la il DataTable: la funzione è la seguente:
Me.Connection.Open() 'Popola la tabella Dim dr As SqlClient.SqlDataReader = Me.SelectCommand.ExecuteReader Tabella.GetData(dr)
Visto tutto questo, il problema è che nel metodo TypedDataTable.GetDataFromReadre non esegue il cast
CType(Me.NewRow, T)
dove T è un tipo Account: l'errore restituito è "Impossibile eseguire il cast di oggetti di tipo 'TypedDataRow' sul tipo 'Account'." ma Account è un TypedDataRow...
Dove sbaglio e come posso risolvere?

Grazie dell'aiuto!!!

--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

Teech Profilo | Expert

Ci ho messo un giorno ma ho risolto... Il casting sopracitato non è nemmeno indispensabile!!!

Nel metodo TypedDataTable.NewRowFromBuilder è sufficiente istanziare un oggetto di classe giusta con la Reflection: in sostanza basta usare il seguente codice
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Dovrò approfondire molto i Generics e la Reflection mi sa!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5