【发布时间】:2012-12-19 04:05:35
【问题描述】:
我是仿制药新手,但我知道我需要使用它们来帮助保持干燥 :)
我正在尝试创建一个类,它将许多不同类型的列表转换为一个由下拉列表控件使用但无法使其工作的通用类。我在下面的方法中展示了 2 个选项来尝试这个,试图让每个选项都工作(一个 foreach 循环和一个 linq),但无济于事。
private static IEnumerable<ddlOptions> GetDDLOptionsViewModel<T>(List<T> genericList, string strPropName)
{
// option A: ForEach loop
Type type = genericList.GetType();
var IdProperty = type.GetProperty("Id");
var DisplayNameProp = type.GetProperty(strPropName);
List<ddlOptions> options = new List<ddlOptions>();
foreach (var l in genericList)
{
options.Add(new ddlOptions
{
Id = IdProperty.GetValue(l, null),
DisplayName = DisplayNameProp.GetValue(l, null)
});
}
return options;
// option B - LINQ
return from l in genericList
select new ddlOptions
{
Id = l.Id,
DisplayName = l.strPropName
};
}
【问题讨论】:
-
你遇到了什么错误
-
有什么理由不能使用类的接口来强制执行“必须具有 .Id 值”语义?然后在 T 上的 where 子句将其约束到该接口?