编辑类中的枚举(不能使用实例引用访问成员)



我正试图根据类实例是否出现在<string, myClass>类型的字典中来编辑该实例中的枚举值。在我看来合乎逻辑的是做下面的代码片段:

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);
                }

我的PumpItems类是这样的:

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;
        }
    }
}

我相信,要在构造函数中有一个枚举值,就必须如上所述设置它们,并在类主体中声明这些枚举的新实例。

在我看来,我试图做的事情是合乎逻辑的,但我在分配的右手边遇到了一个错误,它写道:

"成员PoSClientWPF.pumpState.Available不能通过实例引用访问;qualize使用类型名称代替"

我在几个论坛中搜索过这个错误,但似乎只发现了错误调用静态变量的错误。有人能给我指出解决方案的方向吗?

提前谢谢。

您访问Enum成员时出错:

// this is incorrect
kvp.Value.state = kvp.Value.state.Available; //error here
// this is the correct way
kvp.Value.state = PoSClientWPF.pumpState.Available;

你知道你有字典吗?

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

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

只需将ID添加到PumpItem并使用列表

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;
    }
}

相关内容

最新更新