Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Controllo oggetto duplicato

    Ciao a tutti,
    sto iniziando a sperimentare gli oggetti.
    Ho creato una classe "BollettiniMETEO" ed una lista di oggetti di quella classe.
    Questa classe ha 3 property che vengono definiti contemporaneamente in una sub, che si attiva al click di un button:

    codice:
    Dim BOLLETINI As New List(Of BollettiniMETEO)
    
    Dim bollettino As New BOLLETTINI With {.Città = TextBox1.Text, .Temperatura = TextBox2.Text, .Pressione = TextBox3.Text}
    BOLLETTINI.add(Bollettino)
    In pratica crea un nuovo oggetto e lo inserisce niella lista, avrei necessità di inserirli in lista solo e soltanto nel caso in cui non ci sia un doppione.
    Ho provato a fare

    codice:
    If not BOLLETTINI.contain(Bollettino) then BOLLETTINI.add(Bollettino)
    Ma mi inserisce sempre l'oggetto in lista, in pratica se premo 3 o 4 volte il button, lo inserisce tutte le volte che lo premo.

    Come posso far in modo di inserirlo una volta soltanto (se gia è presente)????????

    Grazie

  2. #2
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    Quando fai un confronto tra oggetti lui confronta se sono lo stesso tipo di oggetto e quindi restituisce sempre TRUE.
    Quindi o fai un confronto con il contenuto dell'oggetto oppure se vuoi fare le cose per bene usa l'interfaccia IEqualityComparer, ma potrebbe essere un pò complessa da capire se si è agli inizi.

  3. #3
    Grazie

  4. #4
    Quote Originariamente inviata da URANIO Visualizza il messaggio
    Quando fai un confronto tra oggetti lui confronta se sono lo stesso tipo di oggetto e quindi restituisce sempre TRUE.
    Uhm, no, il problema è l'esatto opposto, di default due riferimenti ad oggetto sono uguali se puntano alla stessa istanza; visto che tutte le volte crea una nuova istanza ovviamente questa non viene mai trovata all'interno della lista.
    Se vuoi implementare un confronto per valore invece che per riferimento o implementi l'interfaccia IEquatable come spiegato qui, oppure banalmente rendi BollettiniMETEO una Struct invece che una Class: le struct ereditano da ValueType, che fornisce già un'implementazione di Equals che effettua un confronto membro a membro.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    Uhm, no, il problema è l'esatto opposto, di default due riferimenti ad oggetto sono uguali se puntano alla stessa istanza; visto che tutte le volte crea una nuova istanza ovviamente questa non viene mai trovata all'interno della lista.
    Si, hai ragione ho detto una cazzata, viene controllata l'istanza.

  6. #6
    ho provato un attimo la structure, e sembra funzionare bene.
    Ma andrò avanti con il codice ed il resto della sub nei prossimi giorni, vper ora GRAZIE!!

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.