Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Parametri Nothing e metodo Contains
Forum - C# / VB.NET - [VB.NET] Parametri Nothing e metodo Contains

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 22:36
Lunedì, 12/09/2011
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
Codice sorgente - presumibilmente VB.NET

  1. Class Personale
  2. Protected Sub New
  3. ...
  4. Shared Sub Create(ByRef ListaPersone() as String) as Personale
  5. ecc ecc
  6. Dim _ListNomeCognome as List(of String) '<- il mio campo List of String
  7. Public ReadOnly Property ElencoPersonale As List(Of String)
  8.             Get
  9.                 Return _ListNomeCognome
  10.             End Get
  11.         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.
Codice sorgente - presumibilmente VB.NET

  1. 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




In attesa della fine del mondo, fissata per l'anno prossimo, sono alla ricerca di un notaio con cui fare testamento...
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2763
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 22:46
Lunedì, 12/09/2011
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:

Codice sorgente - presumibilmente VB.NET

  1. Public NotInheritable Class Personale
  2.  
  3.         Private Shared _Dipendenti As New List(Of String)()
  4.  
  5.         Public Shared ReadOnly Property ElencoPersonale() As List(Of String)
  6.                 Get
  7.                         Return _Dipendenti
  8.                 End Get
  9.         End Property
  10.  
  11. 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 il 12/09/2011 alle 22:47


Ingegnere Informatico
https://ldlagency.it
PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 0:02
Martedì, 13/09/2011
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:
Codice sorgente - presumibilmente VB.NET

  1. 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
Codice sorgente - presumibilmente C# / VB.NET

  1. 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 il 13/09/2011 alle 0:04


In attesa della fine del mondo, fissata per l'anno prossimo, sono alla ricerca di un notaio con cui fare testamento...
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2763
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 0:10
Martedì, 13/09/2011

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.


Ingegnere Informatico
https://ldlagency.it
PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 8:15
Martedì, 13/09/2011
Usa AndAlso
Codice sorgente - presumibilmente C# / VB.NET

  1. 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


Blog:
<coming soon>
Appalo:
http://www.appalo.it/
PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 20:48
Martedì, 13/09/2011
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: http://www.pierotofy.it/pages/extras/forum/16/1029851-orga ... 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!


In attesa della fine del mondo, fissata per l'anno prossimo, sono alla ricerca di un notaio con cui fare testamento...
PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 20:56
Martedì, 13/09/2011
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: http://www.pierotofy.it/pages/extras/forum/16/1029851-orga ... 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!


In attesa della fine del mondo, fissata per l'anno prossimo, sono alla ricerca di un notaio con cui fare testamento...
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 22:15
Martedì, 13/09/2011
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 il 13/09/2011 alle 22:17
PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 22:34
Martedì, 13/09/2011
Ma no.. sarà che io c'ho lavorato e ho in testa quello che voglio (o vorrei) e allora mi sembra semplice..
Comunque a livello gerarchico, il "mattoncino base" sono i vari "elementi". Più elementi messi assieme, formano la "stringa". Una lista di stringhe forma il "Protocollo". I controlli da fare riguardano la struttura dei vari elementi e la relazione che intercorre tra loro. Verificato questo definisco la stringa che poi "archivio" nella list di Protocollo. A livello di codice, bene o male sono riuscito a scrivere tutto, quello che probabilmente è migliorabile è l'organizzazione interna e il livello di "astrazione" degli oggetti che creo.. Ciò che differenzia la programmazione OOP da quella procedurale, sostanzialmente..:k:


In attesa della fine del mondo, fissata per l'anno prossimo, sono alla ricerca di un notaio con cui fare testamento...
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo