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

时间:2016-04-15 20:44:12

标签: c# class enums

我尝试根据该实例是否出现在<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;

        }

    }
}

我被认为要在构造函数中使用枚举值,它们必须按上面的方式设置,并在类体中声明这些枚举的新实例。

在我看来,我尝试做的事情是合乎逻辑的,但我在分配的右侧收到错误,其中指出:

&#34;成员PoSClientWPF.pumpState.Available无法使用实例引用访问; qualify是一个类型名称而不是&#34;

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

提前致谢。

2 个答案:

答案 0 :(得分:2)

您错误地访问了Enum成员:

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

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

答案 1 :(得分:0)

你知道你有一本字典吗?

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并使用List

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