Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [VB.NET] Chiarimento sulla creazione di una classe

    Ho creato una semplice classe di questo tipo:

    codice:
        Public Class MyHashList
    
        Public Load As hashtable
    
            Public Function write(w as string)
              Dim objEntry As DictionaryEntry
    
                For Each objEntry In Load
                  if objEntry.Key.ToLower = w.ToLower then
                    return objEntry.Value
    
                    exit for
                  end if
                Next
    
    
            End Function
        End Class
    E per utilizzarla:

    codice:
      dim htable as new MyHashList
    
      htable.load=session("HT_Prova")
      response.write (htable.write("Chiave di ricerca"))
    Fino a qui tutto bene. Solo mi chiedevo: come posso impostare la classe in modo da poter caricare la mia hashtable su cui lavorare senza usare la proprietà load. Insomma, con un codice di questo tipo, che mi sembra più immediato:

    codice:
      dim htable as new MyHashList
    
      htable=session("HT_Prova")
      response.write (htable("Chiave di ricerca"))
    Grazie e ciao
    www.radiana.it - Spartiti musicali e Mp3

  2. #2
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    potresti creare una new che accetta in input un parametro hashtable in modo tale da passarlo al dimensionamento
    codice:
    Public Class MyHashList
    
      Private localHashTbl as hastable
    
      Public Sub New (ByVal Load As hashtable)
         localHashTbl = Load
      End Sub
    
      Public Function write(w as string)
        Dim objEntry As DictionaryEntry
          For Each objEntry In localHashTbl
            if objEntry.Key.ToLower = w.ToLower then
              return objEntry.Value
              exit for
            end if
          Next
      End Function
    
    End Class
    così quando crei l'istanza per usarla devi fare:

    codice:
    dim htable as new MyHashList(session("HT_Prova"))
    
    'oppure, se non puoi passare subito l'hashtable:
    dim htable as MyHashList()
    ...
    ...
    htable = new MyHashList(session("HT_Prova"))
    ...

    ciao

  3. #3
    Perfetto, era quello che volevo. Ti chiedo però un'altra cosa: normalmente quanto si crea una funzione si fa qualcosa del tipo:

    Function write(w as string) As string

    Ma in un caso come questo in cui non so se il risultato della mia funzione sarà integer, string o cos'altro, come devo fare. Io ho scritto:

    Function write(w as object) As object

    Ma non sono sicuro sia la soluzione migliore. Ti chiedo anche un'altra cosa: quale è la funzione per sapere di che tipo è una variabile?

    www.radiana.it - Spartiti musicali e Mp3

  4. #4
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    prima risposta: hai fatto bene! In vb.net ogni "cosa" eredita da Object, quindi sono tutti oggetti.

    per verificate il tipo di oggetto restituito puoi usare il metodo getType dell'oggetto stesso e per fare controlli puoi usare la funzione TypeOf()

    es:
    codice:
    dim x as object
    dim y as date
    
    x=y
    
    if TypeOf(x) is Date then
      'data
    else
       'che tipo è?
       x.GetType.FullName
    end if

  5. #5
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    ti dico anche che se sai già il tipo dell'oggetto e vuoi usare una sua proprietà intrinseca puoi usare la directcast

    per esempio, se hai una textbox ed un object, l'object non avrà la proprietà .text

    ma se sai che l'object è una textbox (magari perchè hai una serie di if con l'uso di TypeOf) puoi fare

    DirectCast(MioObject,System.Windows.Forms.Textbox) .Text

  6. #6
    Grazie ancora. Ora però ho questo problema: se la hashtable che carico ha ad esempio una chiave integer anzichè string il ciclo ad un certo punto genera un confronto tra integer e string con relativo errore.

    Potrei risolvere usando if...then e GetType.FullName come mi hai suggerito prima però mi sembra un metodo un po' troppo cervellotico. C'è un sistema migliore?
    www.radiana.it - Spartiti musicali e Mp3

  7. #7
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    beh, se tu non sai di che tipo è la chiave devi fare i test. A volte le scelte sono obbligate. Non so di preciso cosa devi fare, magari trovi la soluzione sbattendoci la testa su + volte.

    Studia con attenzione il risultato che vorresti ottenere e poi scrivi il codice di conseguenza, magari cambiando qualcosa nella struttura della classe potresti ottenere più flessibilità

  8. #8
    Bhe, io per esempio ho modificato la funzione in questo modo:
    codice:
         Public Function Value(k as object) As object
              Dim TypeKey As string
              Dim TypeInsKey As string
    
                For Each objEntry In localHashTbl
                  TypeKey = objEntry.Key.GetType.FullName
                  TypeInsKey = k.GetType.FullName
    
                    if TypeKey = TypeInsKey then
                      if TypeOf(k) is string then
                        if objEntry.Key.ToLower = k.ToLower then
                          return objEntry.Value
                          exit for
                        end if
                      else
                        if objEntry.Key = k then
                          return objEntry.Value
                          exit for
                        end if
                      end if
                    end if
                Next
    
            End Function
    e devo dire che funziona. Solo mi sembra un poco arzigogolato...tu cosa dici?

    P.S.: Toglimi una curiosità: ma in VB.NET è possibile ottenere direttamente il value di una hashtable conoscendone la chiave? Oppure bisogna crearsi una funzione ad hoc (perchè poi è a questo che la mia funzione servirebbe...)

    Ciao e grazie ancora
    www.radiana.it - Spartiti musicali e Mp3

  9. #9
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    certo che puoi

    butta un occhio qui e controlla i membri della classe

    oppure qui , secondo link dall'alto

  10. #10
    Avevo già guardato ma evidentemente non c'ho capito molto visto che l'unico modo che ho trovato è usare value all'interno di un ciclo...hai per caso una pagina con qualche esempio?
    www.radiana.it - Spartiti musicali e Mp3

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.