2010-10-25 7 views
2

Je crée un dictionnaire, puis je le remplis avec des entrées dans main(), puis j'appelle une méthode qui utilise ce dictionnaire. En plus d'inclure le dictionnaire dans les arguments passés à cette méthode, comment puis-je y accéder sans avoir l'erreur 'Une référence d'objet est requise pour le champ non-statique, la méthode ou la propriété' XXX.YYY.dict '?Accéder à un dictionnaire à partir de méthodes en dehors de main dans C#

Edit: Voici le code demandé:

public static void Main() 

    { 
     ulong board = AS | KH | FD | FC | TH | SH | NC; 
     Dictionary<ulong, int> dict; dict = new Dictionary<ulong, int>(); 

     for (int a = 0; a < 49344; a++) 
     { 
      dict.Add(helloworld.Table.handhashes[a], helloworld.Table.ratings[a]); 
     } 


     int hand = 0; 

     for (int ai1 = 0; ai1 < 100000000; ai1++) 
     { 
      hand = FCheck(board); 
     } 
} 

Erreur passe dans FVérifiez, suivant la ligne:

FCheck = dict(condensedBoard); 
+2

Pouvez-vous inclure le code que vous essayez d'utiliser? –

+0

Vous pourriez poster votre code ici ... Ça me semble un problème très basique. Lire un livre pourrait aussi aider. –

+0

Un peu plus d'information ne manquerait pas ici, ainsi que le code comme le suggère Ryan Berger. – jimplode

Répondre

1

la rendre globale?

static Dictionary<X, X> Entries; 

public static void main(string[] args) 
{ 
    // populate and then call dostuff 
} 

public static X dostuff(a) 
{ 
    return Entries[a]; 
} 

?

+0

S'il vous plaît dites-moi que vous n'avez pas utilisé le mot "global"?! –

+0

Global en termes de classe - par opposition à local. C'est juste comme ça que j'ai appris. :) – Blam

2

Vous pouvez faire le dictionnaire une variable statique principale Remplit simplement, mais il est bien plus agréable de passer des variables par des classes qui ont besoin de les

1

Vous pouvez faire votre dictionnaire un champ statique de la classe. Mais les champs statiques doivent être utilisés avec prudence, donc le passer en paramètre est probablement une meilleure solution. Surtout si votre application va grossir avec le temps. Faites-en un membre statique de votre classe Program.

2

Vous n'avez pas montré de code, mais il semble que vous ayez une application de console, donc cela fonctionnerait comme ceci:

class Program 
{ 
    static Dictionary<string, string> _myDict; 

    static void Main(string[] args) 
    { 
     // Fill it here 
    } 

    void MyFunc() 
    { 
     // Access it here 
    } 
}