不能使用枚举隐式转换类型

本文关键字:转换 类型 枚举 不能 | 更新日期: 2023-09-27 18:34:40

正在尝试解决此问题。似乎无法将一个数字分配给另一个数字,即使它们实际上是相同的。

无法将类型"Project.Models.Concern.YesNo"隐式转换为 'Project.ViewModels.PatientConcernViewModel.YesNo'。一个明确的 转换存在(您是否缺少演员表?

public class Concern
{
    public int ConcernID { get; set; }
    public YesNo LifeExpectancy { get; set; }
    public YesNo CollateralHistoryAvailable { get; set; }
    public enum YesNo
    {
        Yes,
        No
    }
}
public class PatientConcernsViewModel
{
    public int ConcernID { get; set; }
    public YesNo LifeExpectancy { get; set; }        
    public YesNo CollateralHistoryAvailable { get; set; }
    public enum YesNo
    {
        Yes,
        No
    }
}
// FROM WITHIN MY CONTROLLER
var concern = concernRepository.Find(id);
// load related assessment data
var assessment = assessmentRepository.Find(AssessmentID);
PatientConcernsViewModel patientConcernsViewModel = new PatientConcernsViewModel();
// BOTH LINES BELOW GENERATE ERRORS            
patientConcernsViewModel.CollateralHistoryAvailable = concern.CollateralHistoryAvailable;
patientConcernsViewModel.LifeExpectancy = concern.LifeExpectancy;

不能使用枚举隐式转换类型

在没有类的情况下公开您的enum - 然后他们可以在没有多个定义的情况下共享它。

public enum YesNo
{
    Yes,
    No
}
public class Concern
{
    public int ConcernID { get; set; }
    public YesNo LifeExpectancy { get; set; }
    public YesNo CollateralHistoryAvailable { get; set; }
}
public class PatientConcernsViewModel
{
    public int ConcernID { get; set; }
    public YesNo LifeExpectancy { get; set; }        
    public YesNo CollateralHistoryAvailable { get; set; }
}

去掉你的YesNo枚举,用System.Boolean替换它。尽可能使用系统类型。

public class Concern
{
    public int ConcernID { get; set; }
    public bool LifeExpectancy { get; set; }
    public bool CollateralHistoryAvailable { get; set; }
}
public class PatientConcernsViewModel
{
    public int ConcernID { get; set; }
    public bool LifeExpectancy { get; set; }        
    public bool CollateralHistoryAvailable { get; set; }
}

为什么不限定YesNo枚举的范围,以便两者都访问同一个对象?

public enum YesNo
{
    Yes,
    No
}
public class Concern
{
    public int ConcernID { get; set; }
    public YesNo LifeExpectancy { get; set; }
    public YesNo CollateralHistoryAvailable { get; set; }
}
public class PatientConcernsViewModel
{
    public int ConcernID { get; set; }
    public YesNo LifeExpectancy { get; set; }        
    public YesNo CollateralHistoryAvailable { get; set; }
}

你有 2 个完全不同的枚举,它们恰好在完全限定的名称中具有相同的项目和相同的最后一个单词。

正如错误状态所示,您有Project.Models.Concern.YesNoProject.ViewModels.PatientConcernsViewModel.YesNo

如果你只是把枚举放在更合适的地方,那么两个类都可以使用它,你没有 2 种类型。

虽然上面回答了你的问题,因为 Aron 说布尔值会比我能想象到的几乎所有目的的 Yes/No 枚举更好。