【问题标题】:How to Cast Enum To Int如何将枚举转换为 Int
【发布时间】:2014-09-03 09:06:10
【问题描述】:

我想将 Enum 转换为 int 值,在我的服务中有一个扩展可以将 Enum 转换为 seletListItem,如下所示

 public Dictionary<int, string> GetWorkingDays()
    {
        var days = typeof(WorkDays).ToSelectList();
        return days;
    }

然后我使用这样的视图包将它返回到我的视图

 ViewBag.WorkingDays = _vendorService.GetWorkingDays().Select(x => new SelectListItem { Value = x.Key.ToString(), Text = x.Value });

现在当从视图中选择其中一个枚举时,它会将 int 值返回给我的控制器,我如何将该 int 转换为我的服务初始化...

感谢您的宝贵时间

这是我的服务

public int AddVendor(string companyname, string addressOne, string addressTwo, string city, string state, string country, string phone, string email, int workingDays)
    {
        var vendor = new Vendor()
        {
            CompanyName = companyname,
            AddressLineOne = addressOne,
            AddressLineTwo = addressTwo,
            City = city,
            State = state,
            Country = country,
            Phone = phone,
            Email = email,
            IsActive = true,
            RegistrationDate = DateTime.Now
            WorkingDays = //casting here to collect the parameter (int workingDays)
        };
        _unitOfWork.VendorRepository.Insert(vendor);
        _unitOfWork.VendorRepository.Save();

        return vendor.Id;
    }

这里是枚举

public enum WorkDays
{
    EveryDay, MondayToFriday, MondayToSaturday, FridayToSunday, SaturdayAndSunday
}

这是控制器

[HttpPost]
    public ActionResult Create(VendorViewModel model)
    {
        //
        if (!ModelState.IsValid)
        {
            ViewBag.WorkingDays = _vendorService.GetWorkingDays().Select(x => new SelectListItem { Value = x.Key.ToString(), Text = x.Value });
            ViewBag.Error = false;
            return View(model);
        }

        var vendor = _vendorService.AddVendor(model.CompanyName, model.AddressLineOne, model.AddressLineTwo, model.City, model.State, model.Country,model.OpeningTime,model.ClosingTime, model.Phone, model.Email, model.WorkingDays);
        if (vendor != 0)
        {
            _vendorService.AddVendorContact(model.FirstName, model.LastName, model.MobileNumber1, model.MobileNumber2, model.EmailAddress, vendor);
        }

        return RedirectToAction("Index");


    }

我的模特

public class Vendor : BaseDataObject
{
   public string CompanyName { get; set; }
    public string AddressLineOne { get; set; }
    public string AddressLineTwo { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Country { get; set; }
    public string Phone { get; set; }
    public string Email { get; set; }
    public DateTime RegistrationDate { get; set; }
    public bool IsActive { get; set; }
    public string OpeningTime { get; set; }
    public string ClosingTime { get; set; }
    public WorkDays WorkingDays { get; set; }

}

public enum WorkDays
{
    EveryDay, MondayToFriday, MondayToSaturday, FridayToSunday, SaturdayAndSunday
}

那么这就是视图模型

public class VendorViewModel
{
    [Required]
    [DisplayName("Company Name")]
    public string CompanyName { get; set; }
    [Required]
    [DisplayName("Address Line One")]
    public string AddressLineOne { get; set; }
    [DisplayName("Address Line Two")]
    public string AddressLineTwo { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Country { get; set; }
    [Phone]
    public string Phone { get; set; }
    [EmailAddress(ErrorMessage = "Invalid E-Mail Address")]
    [Required]
    public string Email { get; set; }
    [DisplayName("Opening Time")]
    public string OpeningTime { get; set; }
    [DisplayName("Closing Time")]
    public string ClosingTime { get; set; }
    [DisplayName("Working Days")]
    public int WorkingDays { get; set; }
}

【问题讨论】:

  • 你有任何谷歌吗?
  • 默认情况下,enumint,因此您可以直接使用:int result = (int) workDays;

标签: c# enums asp.net-mvc-5


【解决方案1】:

你可以像下面这样投!!

int x = (int)WorkDays.MondayToFriday;

如果你想要扩展方法,那么你可以这样写:-

public static class EnumExtensions
{
    public static int ToInt(this Enum enum)
    {
        return (int)((object)enum);
    }
}

并如下所示使用它:-

int x = WorkDays.MondayToFriday.ToInt();

【讨论】:

  • 是的,我试过了,没问题,但我不想分配任何枚举值,我想从我的视图中获取选择的值
  • 还是会变成来自控制器的值?
  • 对不起,我无法得到你想说的@user3811481
  • @user3811481 您的所有代码,除非客户端(例如 javascript)由服务器上 MVC 中的控制器执行。这就是重点,它是一种服务器端技术。您需要某种 POST 函数来获取用户所做的任何选择,然后才能进行投射。
  • 是的... 好的,让我编辑问题并添加使用该服务插入的 Post 控制器
【解决方案2】:

我相信这就是你想要的。我认为您实际上想将 int 转换为 enum 而不是相反。将 int 强制转换为枚举与强制转换任何数据类型相同。 (YourEnum)intVar.

public int AddVendor(string companyname, string addressOne, string addressTwo, string city, string state, string country, string phone, string email, int workingDays)
    {
        var vendor = new Vendor()
        {
            // skipped for brevity
            WorkingDays = (WorkDays)workingDays
        };
        _unitOfWork.VendorRepository.Insert(vendor);
        _unitOfWork.VendorRepository.Save();

        return vendor.Id;
    }

[HttpPost]
    public ActionResult Create(VendorViewModel model)
    {
        //... skipped for brevity
        var vendor = _vendorService.AddVendor(model.CompanyName, model.AddressLineOne, model.AddressLineTwo, model.City, model.State, model.Country,model.OpeningTime,model.ClosingTime, model.Phone, model.Email, (int)model.WorkingDays);
        //... skipped for brevity

    }

也就是说,如果将 workingDays 参数从 int workingDays 参数更改为 enum 参数,则无需强制转换。例如

 public int AddVendor(string companyname, string addressOne, string addressTwo, string city, string state, string country, string phone, string email, int workingDays)

改成

public int AddVendor(string companyname, string addressOne, string addressTwo, string city, string state, string country, string phone, string email, WorkDays workingDays)
{
    var vendor = new Vendor()
    {
        // skipped for brevity
        WorkingDays = workingDays
    };
    _unitOfWork.VendorRepository.Insert(vendor);
    _unitOfWork.VendorRepository.Save();

    return vendor.Id;
}

【讨论】:

    猜你喜欢
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 2013-06-02
    • 2013-08-03
    • 2012-07-12
    相关资源
    最近更新 更多