【发布时间】:2018-09-22 05:36:19
【问题描述】:
我有一个将 T 列表作为参数的通用方法。我正在尝试根据接口类型获取某些数据,并仅填充列表中每个项目的属性,这些属性在接口中定义。
所以我的基本界面是:
public interface IStatusResult
{
int Status { get; set; }
string StatusName { get; set; }
}
我有许多其他实现此接口的接口,我想用它们来确定要检索的状态/状态名称键/值对:
public interface IROQStatusResult: IStatusResult { }
public interface IOrderStatusResult: IStatusResult { }
public interface IActivityStatusResult: IStatusResult { }
最后,我在我的搜索结果类中实现了这个接口:
public class RecommendedOrderQuantitySearchResult:IROQStatusResult {
public int Id { get; set; }
public DateTime TargetDate { get; set; }
public int Status { get; set; }
public string StatusName { get; set; }
}
因此,一旦从 Db 获取列表,我想在通用方法中设置状态名称:
public static List<T> PopulateStatusNames<T>(List<T> items) where T:class
{
Dictionary<int, string> statuses = new Dictionary<int, string>();
if (typeof(IROQStatusResult).IsAssignableFrom(typeof(T))) {
statuses = GlobalConstants.GetROQStatuses();
}
if (typeof(IOrderStatusResult).IsAssignableFrom(typeof(T))){
statuses = GlobalConstants.GetOrderStatuses();
}
foreach (var item in items)
{
item.StatusName = statuses[item.Status];
}
return items;
}
目前,item.StatusName 给我一个错误:项目没有属性 StatusName
我该如何实现?
【问题讨论】: