我有以下类(class):
public class Disciplines
{
public int Id { get; set; }
public string Discipline { get; set; }
public bool IsChecked { get; set; }
}
我的项目有几个 View 模型使用该类以以下形式创建复选框组:
public List<Disciplines> DisciplinesCBG { get; set; }
我将复选框选择作为逗号分隔的字符串保存到数据库中,然后拆分逗号上的字符串以重新显示为复选框:
public static UserProfileViewModel DisciplinesStringToCheckboxGroup(UserProfileViewModel model)
{
string[] disciplineArray = model.Disciplines.Split(',');
for (int i = 0; i < model.DisciplinesCBG.Count; i++)
{
string currentValue = model.DisciplinesCBG[i].Discipline;
if(Array.IndexOf(disciplineArray, currentValue) > -1)
{
model.DisciplinesCBG[i].IsChecked = true;
}
}
return model;
}
我的问题是,除了 UserProfileViewModel
之外,我如何编写可用于其他 ViewModel 类型的方法? ?例如我有一个名为 RegisterViewModel
的 View 模型使用相同的 public List<Disciplines> DisciplinesCBG { get; set; }
我希望能够使用与上面相同的方法,而不必只复制它并更改签名。我假设这是可能的?
最佳答案
您可以创建一个具有 Disciplines
和 DisciplinesCBG
属性的接口(interface),然后在您要应用的每个类中实现它。
interface IHasDiciplines
{
string Disciplines { get; set; }
List<Disciplines> DisciplinesCBG { get; set; }
}
class UserProfileViewModel : IHasDiciplines
{
public string Disciplines { get; set; }
public List<Disciplines> DisciplinesCBG { get; set; }
}
public static IHasDiciplines DisciplinesStringToCheckboxGroup(IHasDiciplines model)
{
string[] disciplineArray = model.Disciplines.Split(',');
for (int i = 0; i < model.DisciplinesCBG.Count; i++)
{
string currentValue = model.DisciplinesCBG[i].Discipline;
if(Array.IndexOf(disciplineArray, currentValue) > -1)
{
model.DisciplinesCBG[i].IsChecked = true;
}
}
return model;
}
关于c# - 重构一个可以处理多种类型的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40539466/