Arm*_*est 3 c# polymorphism interface covariance linq-to-sql
我有多个Linq2Sql类,如"Article""NewsItem""Product".
他们都有一个标题,他们都有一个唯一的ID,他们都有一个摘要.
所以,我创建了一个名为的接口 IContent
public interface IContent {
int Id { get; set; }
String Title { get; set; }
String Summary { get; set; }
String HyperLink { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我试图传递一个List<T>实现IContent,然后使用我在项目中的每个部分类中实现的那些公共属性.
所以,只是澄清一下
Article是Linq实体.我创建了一个部分类并实现了IContent以下是Article.cs的片段:
#region IContent Members
public int Id {
get {
return this.ArticleID;
}
set {
this.ArticleID = value;
}
}
Run Code Online (Sandbox Code Playgroud)
很简单.在我的代码中,我正在尝试这个,但我不知道我哪里出错了:
List<IContent> items;
MyDataContext cms = new MyDataContext();
items = cms.GetArticles();
// ERROR: Can not implicitly convert List<Article> to List<IContent>
Run Code Online (Sandbox Code Playgroud)
如果我的Article班级实施IContent为什么我不能通过文章?我不知道将要传递的对象是什么.
我知道我可以通过继承基类来实现这一点,但是使用LinqToSQL不会使用常规对象.
我确信这很简单,我很想念.
这是因为List类和接口不是协变的.如果您使用的是.NET 4.0和C#4.0,则实际上可以在IEnumerable<>接口上使用协方差,这对LINQ应用程序来说应该没问题.