2016-04-15 8 views
1

Ich versuche, einen Enumerationswert in einer Klasseninstanz basierend darauf zu bearbeiten, ob diese Instanz in einem Dictionary vom Typ <string, myClass> erscheint. Was mir logisch erscheint, ist die Code-Schnipsel unten zu tun:Bearbeiten einer Enumeration in einer Klasse (auf Element kann nicht mit einer Instanzreferenz zugegriffen werden)

if (pumpDict.ContainsKey(ID)) 
       { 
        foreach(KeyValuePair<string, PumpItem> kvp in pumpDict) 
        { 
         if(kvp.Key == ID) 
         { 
          kvp.Value.state = kvp.Value.state.Available; //error here 
          kvp.Value.fuelPumped = fuelPumped; 
          kvp.Value.fuelCost = fuelCost; 
          break; 
         } 
        } 

       } 

       else 
       { 
        PumpItem pump = new PumpItem(); 
        pumpDict.Add(ID, pump); 
       } 

Und meine PumpItems Klasse ist so:

namespace PoSClientWPF 
{ 
    public enum pumpState 
    { 
     Available, 
     customerWaiting, 
     Pumping, 
     customerPaying 
    }; 

    public enum fuelSelection 
    { 
     Petrol, 
     Diesel, 
     LPG, 
     Hydrogen, 
     None 

    }; 
    class PumpItem 
    { 
     public double fuelPumped; 
     public double fuelCost; 

     public fuelSelection selection; 
     public pumpState state;  

     public PumpItem()//intialize constructor 
     {     
      this.fuelPumped = 0; 
      this.fuelCost = 0; 
      this.selection = fuelSelection.None; 
      this.state = pumpState.Available; 

     } 

    } 
} 

Ich führte zu glauben, dass eine ENUM-Wert in einem Konstruktor zu haben, sie müssen wie oben beschrieben eingerichtet werden, wobei eine neue Instanz dieser enums im Klassenkörper deklariert wird.

Es scheint mir, dass das, was ich versuche, logisch zu tun ist, aber ich bin immer einen Fehler auf der rechten Seite der Zuweisung der es heißt:

„Mitglied PoSClientWPF.pumpState.Available kann nicht zugegriffen werden mit einer Instanzreferenz; qualifizieren ist mit einem Typnamen stattdessen "

Ich habe nach diesem Fehler unter mehreren Foren gesucht, aber scheint nur Fehler zu finden, die statische Variablen falsch aufrufen. Kann mir jemand auf eine Lösung hindeuten?

Vielen Dank im Voraus.

+0

Änderung 'kvp.Value.state.Available;' für 'pumpState.Available;' –

+0

'kvp.Value.state = pumpState.Available'? – Quantic

+0

beide in der Tat richtig, weiß nicht, warum ich die falsche Zuordnung nicht selbst gefunden habe. – James

Antwort

2

Sie greifen fälschlicherweise die Enum Mitglied:

// this is incorrect 
kvp.Value.state = kvp.Value.state.Available; //error here 

// this is the correct way 
kvp.Value.state = PoSClientWPF.pumpState.Available; 
0

Sie wissen, dass Sie ein Wörterbuch haben?

PumpItem pumpItem = pumpDict[ID]; 
pumpItem.state = PoSClientWPF.pumpState.Available; 

oder

PumpItem pumpItem; 
if (pumpDict.TryGetValue(ID, out pumpItem)) 
{ 
    pumpItem.state = PoSClientWPF.pumpState.Available; 
} 
else 
{ 
    pumpItem = new PumpItem(); 
    pumpDict.Add(ID, pumpItem); 
} 

konnte nur ID PumpItem hinzufügen und eine Liste

PumpItem pumpItem = pumpList.FirstOrDefualt(x => x.ID == ID) 
if (pumpItem == null) 
    pumpList.Add(new PumpItem(ID)); 
else 
    pumpItem.state = PoSClientWPF.pumpState.Available; 

class PumpItem 
{ 
    public double fuelPumped = 0; 
    public double fuelCost = 0; 
    public fuelSelection selection = fuelSelection.None; 
    public pumpState state = pumpState.Available; 
    public Int32? ID = null; 

    public PumpItem()//intialize constructor 
    { } 
    public PumpItem(Int32? ID) 
    { 
     this.ID = ID; 
    } 
} 
Verwandte Themen