为什么我不能将整数转换为枚举

Ben*_*Ben 0 c# enums

我试图从我已经确认等于的DataGridViewRow单元格值中转换一个整数 0

AddedTask.Status = (TaskStatus) row.Cells["status"].Value;

Visual Studio中的InvalidCastException

这是创建Task对象和TaskStatus Enum的代码.

class Task
{
    public string Description { get; set; }

    public TimeSpan Duration
    {
        get
        {
            if (BeginDate == DateTime.MinValue) // BeginDate has not been set
                return new TimeSpan(0, 0, 0);
            else if (EndDate == DateTime.MinValue)
                return DateTime.Now.Subtract(this.BeginDate);
            else
                return this.EndDate.Subtract(this.BeginDate);
        }
    }

    public DateTime BeginDate { get; set; }
    public DateTime EndDate { get; set; }
    public TaskStatus Status { get; set; }

    public Task()
    {
        this.Description = string.Empty;
        this.BeginDate = new DateTime();
        this.EndDate = new DateTime();
        this.Status = TaskStatus.UNINVOICED;
    }
}

public enum TaskStatus
{
    UNINVOICED,
    INVOICED,
    PAID
}
Run Code Online (Sandbox Code Playgroud)

Ren*_*ogt 6

我测试了一下,观察到如果原始值为a则转换成功,Int32但如果是(例如)a Int64或a 则失败byte.

我建议的解决方案是Convert.ToInt32()在演员表之前使用:

AddedTask.Status = (TaskStatus) Convert.ToInt32(row.Cells["status"].Value);
Run Code Online (Sandbox Code Playgroud)

来自MSDN:

枚举是一组命名常量,其基础类型是任何整数类型.如果未显式声明基础类型,则使用Int32.

所以,你的TaskStatus枚举源自Int32直接从任何其他整数类型强制转换将失败.