Oppure

Loading
12/09/11 20:36
Renny
Ciao a tutti! 8-|
Non so se il titolo è molto appropriato, ma non mi veniva in mente altro. Ho una questione da porre.
Ipotizziamo di avere una Classe costruita come Singleton che al suo interno ha un campo List of String
Class Personale
Protected Sub New
...
Shared Sub Create(ByRef ListaPersone() as String) as Personale
ecc ecc
Dim _ListNomeCognome as List(of String) '<- il mio campo List of String
Public ReadOnly Property ElencoPersonale As List(Of String)
            Get
                Return _ListNomeCognome
            End Get
        End Property

La Classe ha proprietà che permette di accedere alla lista all'interno della Classe. Questa era la premessa, la domanda è la seguente:
Io ho una funzione che come parametro di ingresso ha la classe Personale. Può essere che quando la funzione viene chiamata, la Classe P che viene passata è Nothing, cioè non istanziata. Questo non mio programma ha senso, che creo l'oggetto sono se sono rispettate certe condizioni.
Public Function VerificaNome(Nome as string, P as Personale) as Boolean

Se P è Nothing, quando faccio
IF P.Contains(Nome)
ricevo un errore, dove mi dice che l'oggetto della Classe P non è istanziato. Devo fare un isNothing(P) prima, per verificare se la classe P è <> da Nothing.
La mia domanda è la seguente: come posso fare per evitare di scrivere l'IF IsNothing, visto che è chiaro che se l'oggetto non è istanziato, non contiene Nome e quindi mi aspetto un False, dal metodo Contains.. Si può scrivere un modo che contenga al suo interno sia l'IF per verificare se l'oggetto c'è, e se è valido uso poi il metodo Contains? Troppo Contorto, è? :asd:
Grazie


aaa
12/09/11 20:46
HeDo
in realtà il codice per il check sulla nullità del campo interno al singleton va delegato al metodo GetCurrent del singleton oppure al getter della property.
ancora meglio è istanziare nel costruttore della classe statica oppure (stato dell'arte) direttamente nel campo.

quindi per concretizzare avresti una cosa di questo genere:

Public NotInheritable Class Personale

	Private Shared _Dipendenti As New List(Of String)()

	Public Shared ReadOnly Property ElencoPersonale() As List(Of String)
		Get
			Return _Dipendenti
		End Get
	End Property

End Class


in questo modo, ovunque tu sia nel codice, puoi accedere a Personale.ElencoPersonale e non ti devi preoccupare della sua inizializzazione o nullità :)
Ultima modifica effettuata da HeDo 12/09/11 20:47
aaa
12/09/11 22:02
Renny
Ehm.. Non sono sicuro di aver capito.. Comunque, volevo precisare, la Classe Personale la creo con un metodo Factory (non singleton, mi sono sbagliato), e li analizzo i dati che passo alla classe per poi istanziare l'oggetto. E fin qui ci siamo.
Quello che sto facendo è che dopo aver istanziato una serie di oggetti (tutti con metodi factory) devo fare delle verifiche confrontando gli elementi contenuti nei vari oggetti: e li la mia funzione:
Public Function VerificaNome(Nome as string, P as Personale) as Boolean

Qui c'è un solo oggetto come parametro di ingresso ma nel mio progetto certe funzioni fanno confronti tra 3 o 4 oggetti. E capita che alcuni oggetti risultino non istanziati.
Cioè, io prima dichiaro
Dim MyPersonale as Personale

Ma poi analizzando i dati inseriti dell'utente può essere che MyPersonale non venga mia "costruito" e che quindi sia = Nothing.
Ora, nella funzione di controllo io passo MyPersonale e poi ci devo applicare il metodo Contains.. L'inghippo è li, che se Mypersonale=nothing, mi da un'eccezione...
Rispetto al codice che hai messo tu, è cose se oggetto Personale MyPersonale non venisse istanziato.. E' li, il check che devo fare.. Forse è una proprietà che devo aggiungere proprio alla ClassePersonale, cioè.. non so:-?:_doubt:
Vabbè, grazie.!

Ultima modifica effettuata da Renny 12/09/11 22:04
aaa
12/09/11 22:10
HeDo

secondo me tutto questo non ha senso, a parte il fatto che è un problema solo logistico e quindi facilmente risolvibile, ma credo che ci sia qualche errore ben più grave all'interno della struttura dell'applicazione.
non ci si dovrebbe mai trovare in questa situazione.
descrivi in dettaglio l'architettura generale del tuo software, ti potremo aiutare a non trovarti più in questo genere di problemi.
aaa
13/09/11 6:15
Qwertj
Usa AndAlso
Return P IsNot Nothing AndAlso P.Contains(Name)

Così ti invoca Contains solo se P non è Nothing

Quoto comunque HeDo, c'è qualcosa che non va nella progettazione dell'applicazine
aaa
13/09/11 18:48
Renny
Ok, vi spiego molto volentieri, per sommi capi, su cosa sto lavorando :k:
Per chi ha voglia, una descrizione sommaria del progetto è anche a questo link: pierotofy.it/pages/extras/forum/16/1029851-organizzazioni_in_classi_2/ Avevo già stressato Totem...:D
Sto provando a fare un parser di stringhe, codificate in un certo modo. L'utente inserisce le varie stringhe, in un numero variabile (10, 20, anche 30). Il programma si occupa di verificare la correttezza delle stringhe inserite in base a delle regole e poi, terminato l'inserimento, si procede a una serie di conteggi e calcoli sulla base di quanto inserito.
Ho quindi una classe "Protocollo", che rappresenta tutte le stringhe (difatti contiene una list di "Stringhe". La classe Stringa rappresenta la singola stringa inserita. Per crearla uso la tecnica dei metodo factory che come parametro in ingresso ha proprio la stringa inserita in una textbox. All'interno del metodo factory di stringa, spezzetto quanto inserito e lo analizzo singolarmente. Ogni stringa infatti è composta da una serie di elementi, alcuni sempre presenti e altri "opzionali". Ho dichiarato quindi le varie classi "elemento1", "elemento2", ecc che mi rappresentano i singoli elementi (che nel loro insieme formano la stringa). Anche qui, metodo factory, per verificare gli errori e gestisco delle eccezioni definite da me.. Più che altro che così ho scritto delle stringhe di testo da visualizzare all'utente per speficare l'errore. Come dicevo, alcuni elemento sono opzionali e può essere che non vengano creati, mentre analizzo la risposta. Alcuni Check, sempre in fase di creazione della "stringa" si basano sull'incrocio dei dati raccolti in più elementi. Ecco quindi la mia funzione di controllo, che ha in ingresso come parametri i miei vari oggetti "elementi" e capita che alcuni siano = nothing, perché per quanto ha inserito l'utente, non devono essere "creati"...
E' così sbagliato il mio modo di procedere? 8-|:asd: C'è un modo migliore per fare tutto ciò? In fin dei conti il grosso del codice è tutta una serie di "contains" per verificare la correttezza in termini proprio di "caratteri" di quanto l'utente inserito e poi controlli del tipo "se elemento1.contains(XX)" AND elemento2.contais(YY) -> errore ecc ecc Capito come?:yup:
Ciao, grazie!
aaa
13/09/11 18:56
Renny
Ok, vi spiego molto volentieri, per sommi capi, su cosa sto lavorando :k:
Per chi ha voglia, una descrizione sommaria del progetto è anche a questo link: pierotofy.it/pages/extras/forum/16/1029851-organizzazioni_in_classi_2/ Avevo già stressato Totem...:D
Sto provando a fare un parser di stringhe, codificate in un certo modo. L'utente inserisce le varie stringhe, in un numero variabile (10, 20, anche 30). Il programma si occupa di verificare la correttezza delle stringhe inserite in base a delle regole e poi, terminato l'inserimento, si procede a una serie di conteggi e calcoli sulla base di quanto inserito.
Ho quindi una classe "Protocollo", che rappresenta tutte le stringhe (difatti contiene una list di "Stringhe". La classe Stringa rappresenta la singola stringa inserita. Per crearla uso la tecnica dei metodo factory che come parametro in ingresso ha proprio la stringa inserita in una textbox. All'interno del metodo factory di stringa, spezzetto quanto inserito e lo analizzo singolarmente. Ogni stringa infatti è composta da una serie di elementi, alcuni sempre presenti e altri "opzionali". Ho dichiarato quindi le varie classi "elemento1", "elemento2", ecc che mi rappresentano i singoli elementi (che nel loro insieme formano la stringa). Anche qui, metodo factory, per verificare gli errori e gestisco delle eccezioni definite da me.. Più che altro che così ho scritto delle stringhe di testo da visualizzare all'utente per speficare l'errore. Come dicevo, alcuni elemento sono opzionali e può essere che non vengano creati, mentre analizzo la risposta. Alcuni Check, sempre in fase di creazione della "stringa" si basano sull'incrocio dei dati raccolti in più elementi. Ecco quindi la mia funzione di controllo, che ha in ingresso come parametri i miei vari oggetti "elementi" e capita che alcuni siano = nothing, perché per quanto ha inserito l'utente, non devono essere "creati"...
E' così sbagliato il mio modo di procedere? 8-|:asd: C'è un modo migliore per fare tutto ciò? In fin dei conti il grosso del codice è tutta una serie di "contains" per verificare la correttezza in termini proprio di "caratteri" di quanto l'utente inserito e poi controlli del tipo "se elemento1.contains(XX)" AND elemento2.contais(YY) -> errore ecc ecc Capito come?:yup:
Ciao, grazie!
aaa
13/09/11 20:15
Allora, non so cosa possano pensare i miei colleghi utenti ( :rotfl: ) ma per me l'organizzazione è molto complessa, o almeno, io non riesco a farmene un'idea precisa.
Per quanto riguarda la tua domanda nuda e cruda, ti avrei risposto di considerare l'utilizzo delle espressioni regolari ma a quanto vedo dal topic precedente già le conosci.

Credo che senza avere il progetto a portata di mano sarà piuttosto difficile aiutarti :pat:
Ultima modifica effettuata da 13/09/11 20:17