Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703

    c# Definizione e implementazione Dictionary

    ciao a tutti avrei un problema con il tipo di collection Dictionary;

    all'interno di una mia classe dichiaro:
    codice:
    public Dictionary<string, Int32> SquadraA { get; set; }
    e poi cerco di implemetarlo:

    codice:
    MyClass p = new MyClass();
    p .SquadraA.Add(Convert.ToString(this.SquadraA.SelectedValue.ToString()), 2);
    solo che mi da continuamente
    Riferimento a un oggetto non impostato su un'istanza di oggetto.
    anche se faccio:
    partita.SquadraA.Add("abc", 3);

    sempre uguale, avete idea del perchè si comporta così?

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    prova così
    codice:
    namespace testConsoleApplication
    {
        using System;
        using System.Collections.Generic;
    
        public class MiaClasse
        {
            private Dictionary<string, int> _Dizionario = null;
    
            public Dictionary<string, int> Dizionario
            {
                get
                {
                    if (this._Dizionario == null)
                    {
                        this._Dizionario = new Dictionary<string, int>();
                    }
                    return this._Dizionario;
                }
            }
        }
    }
    e lo richiami così
    codice:
            public static void Main()
            {
                MiaClasse j = new MiaClasse();
                Dictionary<string, int> d = j.Dizionario;
                d["pietro"] = 1;
                d["nicola"] = 2;
                foreach (KeyValuePair<string, int> x in d)
                {
                    Console.WriteLine("{0} {1}", x.Key, x.Value);
                }
                Console.Write("Premere un tasto per continuare . . . ");
                Console.ReadKey();
            }
    Pietro

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,461

    Re: c# Definizione e implementazione Dictionary

    Originariamente inviato da cleaner
    all'interno di una mia classe dichiaro:
    codice:
    public Dictionary<string, Int32> SquadraA { get; set; }
    solo che mi da continuamente
    Riferimento a un oggetto non impostato su un'istanza di oggetto.
    Hai creato l'istanza del dizionario nel costruttore o nella dichiarazione della variabile?

    codice:
    SquadraA = new Dictionary<string, Int32>();
    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    ok, creando l'istanza del dizionario nella dichiarazione della variabile funziona:
    codice:
    partita.SquadraA = new Dictionary<string, Int32>();
    forse ho un problema io di fondo però, volevo capire perchè se dichiaro una propietà pubblica all'interno di una mia classe
    codice:
    public string a { get; set; }
    e cerco di settarla nel main
    codice:
    Partita partita = new Partita();
    codice:
    partita.a = "prova";
    non mi da lo stesso problema di creazione dell'istanza? grazie mille!

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,461
    Originariamente inviato da cleaner
    forse ho un problema io di fondo però, volevo capire perchè se dichiaro una propietà pubblica all'interno di una mia classe
    codice:
    public string a { get; set; }
    e cerco di settarla nel main
    codice:
    Partita partita = new Partita();
    partita.a = "prova";
    non mi da lo stesso problema di creazione dell'istanza? grazie mille!
    L'errore che riscontri è dovuto al fatto che hai chiamato un metodo su un oggetto non istanziato.

    Il caso che poni qui sopra è diverso: tu non stai chiamando un metodo della classe String sull'oggetto nella variabile a, ma stai assegnando un valore a questa variabile.

    Se tu non assegnassi nulla alla variabile a, che quindi avrebbe come valore predefinito null, e chiamassi un suo metodo, ad esempio Trim(), allora sì che si tratterebbe dello stesso scenario che hai posto nel messaggio iniziale.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    ok, ho capito, ti ringrazio

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    703
    sempre a riguardo di questa collection ora non capisco bene come recuperare chiave e valore..
    io mi aspettavo di poter passare l'indice del dizionario e così recuperare key e value..ho guardato anche msdn ma con scarso successo, mi fareste un esempio? grazie

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    scusa, ma lo hai guardato l'esempio che ti ho fatto (dove recupero proprio chiave-valore)? o non funziona?
    Pietro

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,461
    Originariamente inviato da cleaner
    sempre a riguardo di questa collection ora non capisco bene come recuperare chiave e valore..
    io mi aspettavo di poter passare l'indice del dizionario e così recuperare key e value..ho guardato anche msdn ma con scarso successo, mi fareste un esempio? grazie
    Puoi accedere alla lista delle chiavi (Keys) per ottenere - appunto - le chiavi in base all'indice, e lo stesso puoi fare con i valori (Values), ma utilizzare un dizionario generalmente serve perchè si vuole risalire al valore partendo dalla chiave, altrimenti puoi usare benissimo un array o una lista anche disgiunta.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.