从枚举索引切换大小写

时间:2015-06-06 20:45:51

标签: c#

namespace TaskBarPlus {
public partial class Form2 : Form {
    public Form2() {
        InitializeComponent();
    }

    public class General {
        public enum ProcessPriority { Low = 0, Normal = 1, High = 2 }; ProcessPriority _Priority;

        [Category("Settings"), DisplayName("Application Priority")] public ProcessPriority Priority {
            get { return _Priority; }
            set {
                _Priority = value;
                switch (value) {
                    case 0: Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.Idle;
                    case 1: Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.Normal;
                    case 2: Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High;
                }
            }
        }
    }


    private void Form2_Load(object sender, EventArgs e) {
        General general = new General();
        propertyGrid1.SelectedObject = general;
    }
}

}

  

错误无法将类型'int'隐式转换为   'Form2.General.ProcessPriority'。存在显式转换(是   你错过了一个演员?)

2 个答案:

答案 0 :(得分:2)

为什么不在switch语句中使用实际的枚举值

public class General {
    public enum ProcessPriority { Low = 0, Normal = 1, High = 2 }; 

    ProcessPriority _Priority;

    [Category("Settings"), DisplayName("Application Priority")] 
    public ProcessPriority Priority {
        get { return _Priority; }
        set {
            _Priority = value;
            switch (value) {
                case ProcessPriority.Low: 
                    Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.Idle;
                    break;
                case ProcessPriority.Normal: 
                    Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.Normal;
                    break;
                case ProcessPriority.High: 
                    Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High;
                    break;
            }
        }
    }
}

异常消息指出将整数隐式转换为ProcessPriority无效。这是有道理的,因为ProcessPriority priority = -423在ProcessPriority的上下文中没有多大意义。由于您明确知道了这些值,因此可以选择强制转换整数

case (PriorityClass) 1:

或者

int priorityVal = (int) value;
switch (priorityVal) {
    case 0:
        ....
}

答案 1 :(得分:0)

这是因为你的财产Priority的类型为ProcessPriority,如下所示

public ProcessPriority Priority {

value is ProcessPriority和您Switch中的case 0 0 Int32属于switch(value) { case ProcessPriority.Idle: .... } 类型。

你应该说像

UDP listener