在 C# 中更改对象类型或解决方法

本文关键字:类型 解决 方法 对象 | 更新日期: 2023-09-27 18:34:33

我正在尝试优化我的代码,我有一个方法,我想根据提供给该方法的视图模型类型来填充视图模型的下拉列表。 我这样做的原因是为了减少冗余代码。

意识到我正在以javascript的方式思考这个问题,所以我认为我正在使这比它需要的更难。

这是伪代码,它不起作用,因为您无法根据我的理解更改 C# 中的类型:

解决这个问题的最佳方法是什么?

编辑 从视图模型添加了代码以澄清我的问题。我正在尝试从两个不同的控制器方法调用相同的方法,并为每个控制器方法中的下拉菜单提供通用选择列表。

以下是视图模型中的常见代码:

[Display(Name = "What kind of Stuff?")]
public int? StuffId { get; set; }
public IEnumerable<SelectListItem> StuffTypes { get; set; }

以下是来自控制器的代码:

private void populateDropDownsPart2(Part2ViewModel part2viewmodel, PrintViewModel printviewmodel)
    {
       var currentviewmodel = (some initialization object);
        if (part2viewmodel == null)
        {
            currentviewmodel = printviewmodel;
        }
        else
        {
           currentviewmodel = part2viewmodel;
        }
        var SomeDropDownContent = new SelectList(db.Stuff, "StuffId", "StuffName", studentmeddiet.StuffId);
        currentviewmodel.SelectListOfStuff = SomeDropDownContent;
    }

以下是来自不同视图的常见代码:

@Html.DropDownListFor(m => m.StuffId, Model.StuffTypes,"--Select--",new {name="StuffId" })

在 C# 中更改对象类型或解决方法

从纯粹的设计角度来看,您需要一个接口:

public interface ISelectableListOfStuff
{
    SelectList SelectListOfStuff;
}

您希望此方法处理的任何视图模型都应实现该接口:

public Part2ViewModel : ISelectableListOfStuff

然后你的方法应该采用ISelectableListOfStuff:

private void populateDropDownsPart2(ISelectableListOfStuff selectableViewModel)

可以调用该方法并传入实现 ISelectableListOfStuff 接口类型的任何对象。