![](/img/trans.png)
[英]Unable to cast object of type error in lambda expression (CsvHelper)
[英]Cast object in lambda expression
我正在尝试将列表投射到我的自定义列表中,即ProjectList
IList<Project> projects = cm.GetOrAdd("projectList", () => (ProjectList)ProjectService.GetAllProjects().ToList(), new CacheItemPolicy(5));
ProjectList仅包含:
public class ProjectList : List<Project>
{
public override string ToString()
{
return string.Format("Projects: {0}", this.Count());
}
}
但是,它给出了一个运行时错误,提示它无法强制转换对象。
错误:
System.Collections.Generic.List`1 [sidc.Framework.Data.Entities.Project]无法转换为sidc.Framework.Web.Helpers.ProjectList类型。
我在监督什么吗? 我使用lambda是因为当对象不在缓存中时,我的cm(CacheManager)将评估Func<>
。
您不能将List<T>
转换为继承自List<T>
任何类型,因为运行时无法为您填充空白。 它不知道如何从“动物”创建“狗”。 那就是编译器试图告诉您的。
添加一个接受Project
枚举的构造函数,并使用该列表填充自身:
public class ProjectList : List<Project>
{
public ProjectList() { }
public ProjectList(IEnumerable<Project> projects)
: this()
{
this.AddRange(projects);
}
public override string ToString()
{
return string.Format("Projects: {0}", this.Count());
}
}
然后从以下位置更改您的lambda:
() => (ProjectList)ProjectService.GetAllProjects().ToList()
至:
() => new ProjectList(ProjectService.GetAllProjects())
但是通过引入具体类型( List<Project>
ProjectList
),您几乎可以消除对泛型的使用:不必为每个记录类型指定类型。 您可能根本不需要ProjectList
。
这就是继承的工作方式-您可以将ProjectList
为List<Project>
,但不能相反List<Project>
的类型不是ProjectList
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.