2016-11-09 8 views
0

Ich habe ein Wörterbuch definiert eine Schleife durch die in SetStoreInfoDetail definiert:Wie ein Wörterbuch in verschiedenen Verfahren

public void SetStoreInfoDetail(int issueID) 
     { 

      _mgr = new CRCManager(); 

      StoreInfo StoreInfoFields = new StoreInfo(); 

      List<StoreInfo> StoreList = _mgr.GetStoreList(issueID); 


      var StoreInfoMapping = StoreList.ToDictionary(keySelector: row => row.store_info_id); 
} 

Ich möchte StoreInfoMapping eine Schleife durch:

Aktuelle Code:

foreach (StoreInfo store_info_id in StoreInfoMapping) 
{ 
Do Something 
} 

Was mache ich hier falsch? Irgendwelche Vorschläge werden geschätzt.

+0

Das Wörterbuch muss im Geltungsbereich sein. Sie können das Wörterbuch von der Methode zurückgeben. – itsme86

+0

Je nachdem, wie der Code strukturiert ist, gibt es verschiedene Möglichkeiten. Wie kommt der logische Fluss vom ersten Code-Snippet zum zweiten? – David

Antwort

0

Sie haben ein Dictionary (StoreInfoMapping) als letztes in Ihrer Methode instanziiert, es wird dann unbenutzt und entsorgt.

Eine Möglichkeit, dies zu lösen, ist eine Dictionary<key,value> als die Rückkehr des Verfahrens Typ haben

public Dictionary<int,StoreInfo> SetStoreInfoDetail(int issueID) 

und dann, wo Sie die Variable erstellen Sie es zurückgeben kann

return StoreList.ToDictionary(keySelector: row => row.store_info_id); 

schließlich in dem Code, in dem Wenn Sie darauf verweisen möchten, können Sie dies tun.

//your id = id in this example and the dictionary is assumed to be an <int, StoreInfo> 
StoreInfoMapping = SetStoreInfoDetail(id) 

foreach (StoreInfo store_info_id in StoreInfoMapping) 
{ 
    //Do Something 
} 

Nach dem Einlesen g Ihr Kommentar, würde ich stattdessen vorschlagen, dass Sie ref oder out Variablen

public void SetStoreInfoDetail(int issueID, ref Dictionary<int, StoreInfo> theDict) 

Dies ist dann wie so

StoreInfoMapping = new Dictionary<int, StoreInfo>(); 
SetStoreInfoDetail(id, ref StoreInfoMapping); 

Bei dem Verfahren selbst, statt Instanziieren das Wörterbuch aufgerufen werden würde verwenden können, können Sie Verwenden Sie die übergebene. Alle vorgenommenen Änderungen werden außerhalb der Methode angezeigt.

+0

Ich kann den Methodentyp nicht in public Dictionary SetStoreInfoDetail (int issueID) ändern, da dies einen Konflikt mit meiner anderen Logik verursacht, die woanders verwendet wird. – Programmermid

+0

@Programmermid Wie wäre es jetzt? –

0

Versuchen Sie das Wörterbuch Looping mit:

foreach (KeyValuePair<int,StoreInfo> info in StorInfoMapping) 
{ 
    //Key is the store_info_id 
    //Value is the StoreInfo object   
} 

Wenn Sie das Wörterbuch wollen mit anderen Methoden zugegriffen werden.

class StoreInfoClass //Your class 
{ 
    //Define dictionary here so it can be accessed by all function within the class 
    private Dictionary<int,StoreInfo> StoreInfoMapping; 

    //Your Functions 
    public void SetStoreInfoDetail(int issueID) 
    { 

     _mgr = new CRCManager(); 

     StoreInfo StoreInfoFields = new StoreInfo(); 

     List<StoreInfo> StoreList = _mgr.GetStoreList(issueID); 


     StoreInfoMapping = StoreList.ToDictionary(keySelector: row => row.store_info_id); 
    } 
} 
+0

Ja, aber mein Wörterbuch ist in einer anderen Methode definiert. Ich suche also nach einer Möglichkeit, das Wörterbuch von einer anderen Methode aus aufzurufen. – Programmermid

+0

Sie können entweder eine Variable (Wörterbuch) innerhalb der Klasse erstellen, auf die beide Funktionen zugreifen können, oder diese aktuelle Funktion SetStoreInfoDetail (int issueID) ein Wörterbuch zurückgeben. – Jawad

Verwandte Themen