我创建了一个支持所有类模型的函数(泛型)。但是我有一个查询要获取每个循环中的generic的值。
这是针对ASP.NET(MVC),在控制器中创建的代码。
public List<SelectListItem> GetGenericList<T> (list<T> genModel)
{
List<SelectListItem> lst = new List<SelectListItem>();
foreach(var dyn in lst)
{
lst.add (new selectlistitem
{
text = dyn.??,
Value = dyn.??
});
}
}
答案 0 :(得分:1)
执行此操作的一种方法是在方法中添加两个参数-文本选择器和值选择器:
public List<SelectListItem> GetGenericList<T> (list<T> genModel, Func<T, string> textSelector, Func<T, string> valueSelector)
{
List<SelectListItem> lst = new List<SelectListItem>();
// loop through genModel, not lst!
foreach(var model in genModel)
{
lst.add (new SelectListItem
{
Text = textSelector(model), // Note how we use the selectors here
Value = valueSelector(model)
});
}
return lst;
}
要将此方法与Employee
一起使用,请按以下步骤操作:
GetGenericList(someEmployeeList, x => x.empid, x => x.empname);
对于Student
,您可以使用dp:
GetGenericList(someStudentList, x => x.studentid, x => x.studentname);
答案 1 :(得分:1)
您不需要为此要求实现Generics。您所要做的就是在班级之间使用默认的“经纪人”。
只需为模型创建一个通用界面
interface IModelInterface
{
int Id { get; set; }
string Name { get; set; }
}
并且您的班级应该将接口实现为
public class Student : IModelInterface
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Employee : IModelInterface
{
public int Id { get; set; }
public string Name { get; set; }
}
对您的GetGenericList方法稍作更改
public List<SelectListItem> GetListItems(List<IModelInterface> genModel)
{
List<SelectListItem> lst = new List<SelectListItem>();
foreach (var dyn in genModel)
{
lst.Add(new SelectListItem
{
Text = dyn.Name,
Value = Convert.ToString(dyn.Id)
});
}
return lst;
}
有多种实现方法。我只是给你一个答案。