Uso dei Generics

lunedì 22 ottobre 2007 - 17.43

gmt Profilo | Junior Member

Salve ho questa esigenza e non so se i generics possono fare al caso..
leggendo quà e là credo di si, ma io non riesco..

Parliamo in applicativo windows scritto in C#

in una parte del codice leggo i dati da un datareader lDr

lclasse.ragionesociale = lDr.GetString(1).ToString().Trim();
lclasse.indirizzo = lDr.GetString(2).ToString().Trim();
lclasse.cap = lDr.GetString(3).ToString().Trim();

se il valore del db è nullo da errore..

Volevo creare una funzione ELIMINANULL che passato il valore (lDr.GetString(1) oppure lDr.getValues(1) .. come preferite) ritorna il valore se non nullo oppure 0 o "" se numerico o stringa..

Pensavo a creare una classe generics in cui passo il tipo del campo (string o Int32) + il valore e mi ritorna il valore oppure 0 - "" se nullo..

E' possibile?
Grazie

alx_81 Profilo | Guru

>Salve
Ciao!
>ho questa esigenza e non so se i generics possono fare al caso..
>leggendo quà e là credo di si, ma io non riesco..
>
>Parliamo in applicativo windows scritto in C#
>
>in una parte del codice leggo i dati da un datareader lDr
>
>lclasse.ragionesociale = lDr.GetString(1).ToString().Trim();
>lclasse.indirizzo = lDr.GetString(2).ToString().Trim();
>lclasse.cap = lDr.GetString(3).ToString().Trim();
>
>se il valore del db è nullo da errore..
>
>Volevo creare una funzione ELIMINANULL che passato il valore
>(lDr.GetString(1) oppure lDr.getValues(1) .. come preferite)
>ritorna il valore se non nullo oppure 0 o "" se numerico o stringa..
>
>Pensavo a creare una classe generics in cui passo il tipo del
>campo (string o Int32) + il valore e mi ritorna il valore oppure
>0 - "" se nullo..
>
>E' possibile?
diciamo che con i generics puoi scrivere un template per una classe utilizzando un segnaposto per il tipo dei dati che in essa utilizzi (quelli che ritieni opportuno).
Ad esempio:

class Utility <T> { static public T IsNull(T param) { if (param != null) { return param; } } }

In questo modo quando richiami la classe, puoi definire il tipo di ritorno della funzione e il tipo dei parametri che passi.
Ma poi la funzione al suo interno deve comunque controllare il tipo per tornare risultati diversi.
Poi, considera che all'intero non puoi passare null e questo ti impone di gestire il fatto che ti possa arrivare un null prima di lanciare la funzione.
Non so, in questo caso preferisco due funzioni differenti.. una per le stringhe ed una per gli interi. E la gestione del null ti consiglio di farla prima comunque, utilizzando dei default (ad esempio se nel tuo intero da db ricevi null, imponi -1 o un valore che sai che non userai mai).
ad esempio, per le stringhe:

static public string StrIsNull(string param) { string retValue = ""; if (param != null) { retValue = param; } return retValue; }

e per gli interi:
static public int IntIsNull(int param) { int retValue = 0; if (param != -1) { retValue = param; } return retValue; }

>Grazie
di nulla!
spero possa esserti di aiuto.. ma mi appello ai veri esperti nel settore
Alx81 =)

http://blogs.dotnethell.it/suxstellino

gmt Profilo | Junior Member

In Vb6 era più semplice.. mettevo la maialata del variant e potevo passare anche un null..
lo controllavo all'interno della funzione e restituivo quello che volevo..

Riporto la mia funzione EliminaNull del VB6

Cosi' dovevo chiamare dal codice ..
Campo = EliminaNull(recordset(0), True, ..)

senza fare if isnull() chiamo.. e cosi' via..

comunque ho capito qualcosa in più sui generics e ti ringrazio..



Function EliminaNull(Stringa As Variant, Optional seNumerico As Boolean, Optional SeTrim As Boolean, Optional SEMenoUno As Boolean = False, Optional SeData As Boolean = False) As Variant
If (IsNull(Stringa)) Then
If SeData Then
EliminaNull = DATA_NULLA
Else
If seNumerico Then
If SEMenoUno Then
EliminaNull = -1
Else
EliminaNull = 0
End If
Else
EliminaNull = ""
End If
End If
Else
If seNumerico Then
EliminaNull = Val(FissaVirgola(Stringa))
Else
If SeTrim Then
Do While True
Stringa = Trim(Stringa)
' Stringa = Replace(Stringa, " ", " ")
' If InStr(Stringa, " ") <= 0 Then Exit Do
Exit Do
Loop
EliminaNull = Stringa
Else
EliminaNull = Stringa
End If
End If
End If
End Function

alx_81 Profilo | Guru

>In Vb6 era più semplice.. mettevo la maialata del variant e potevo
>passare anche un null..
eheh.. proprio una maialata
cmq se puoi, opta per più metodi..
ciao!
Alx81 =)

http://blogs.dotnethell.it/suxstellino
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5