我试图从我已经确认等于的DataGridViewRow单元格值中转换一个整数 0
AddedTask.Status = (TaskStatus) row.Cells["status"].Value;
这是创建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)
我测试了一下,观察到如果原始值为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并直接从任何其他整数类型强制转换将失败.
| 归档时间: |
|
| 查看次数: |
253 次 |
| 最近记录: |