C# 如何在C3.5中将列表转换为列表
代码示例:C# 如何在C3.5中将列表转换为列表,c#,C#,代码示例: public Interface IArticle { int cid{get;set;} string Name{get;set;} string Content{get;set;} ... } public Class Article:IArticle { public int cid{get;set;} public string Name{get;set;} public string Content{get;set;}
public Interface IArticle
{
int cid{get;set;}
string Name{get;set;}
string Content{get;set;}
...
}
public Class Article:IArticle
{
public int cid{get;set;}
public string Name{get;set;}
public string Content{get;set;}
public string Extension{get;set;}
...
}
/*
ArticleBiz.GetArticles(int cid) is select some items from database,return type:List<Article>
*/
List<IArticle> articleList=ArticleBiz.GetArticles(2).FindAll(p=>p.cid==cid)
例外情况:
Error 1 Cannot implicitly convert type
'System.Collections.Generic.List<Zm.Models.Article>'
to
'System.Collections.Generic.IList<Zm.Models.IArticle>'.
An explicit conversion exists (are you missing a cast?)
问题:我不想在GetArticles中将返回类型更改为List。。方法如何更改代码以成功地将列表转换为列表?希望,选择可以帮助您
List<IArticle> articleList = ArticleBiz.GetArticles(2).FindAll(p => p.cid == cid)
.Select(x => x as IArticle).ToList()
希望,选择可以帮助你
List<IArticle> articleList = ArticleBiz.GetArticles(2).FindAll(p => p.cid == cid)
.Select(x => x as IArticle).ToList()
您可以使用LINQ:
List<IArticle> articleList = ArticleBiz
.GetArticles(2)
.Where(p => p.cid == cid)
.Cast<IArticle>()
.ToList();
您可以使用LINQ:
List<IArticle> articleList = ArticleBiz
.GetArticles(2)
.Where(p => p.cid == cid)
.Cast<IArticle>()
.ToList();
怎么样
List<IArticle> articleList = ArticleBiz.GetArticles(2).Where(p => p.cid == cid)
.Select(x => (IArticle)x).ToList();
怎么样
List<IArticle> articleList = ArticleBiz.GetArticles(2).Where(p => p.cid == cid)
.Select(x => (IArticle)x).ToList();
您可以编写自己的隐式演员阵容
public static implicit operator IArticle(Article article)
{
return article;
}
另一种解决方案是编写显式强制转换运算符
///No need for an explicit cast though.
public static explicit operator IArticle(Article article)
{
return (IArticle)article;
}
但是,您能告诉我为什么要从数据库而不是IArticle对象返回文章吗?您可以编写自己的隐式cast
public static implicit operator IArticle(Article article)
{
return article;
}
另一种解决方案是编写显式强制转换运算符
///No need for an explicit cast though.
public static explicit operator IArticle(Article article)
{
return (IArticle)article;
}
但是,您能告诉我为什么要从数据库而不是IArticle对象返回文章吗?以下是我的方法:
IList<IArticle> articles = new List<Article>().Cast<IArticle>().ToList();
我的做法如下:
IList<IArticle> articles = new List<Article>().Cast<IArticle>().ToList();
将列表指定给列表不起作用的原因是,您可以执行以下操作:
class CrazyArticle : IArticle { ... }
List<Article> articles = ...
List<IArticle> iarticles = articles; // this is not actually legal
iarticles.Add(new CrazyArticle());
// now either things should crash because we tried to add CrazyArticle to a List<Article>,
// or we have violated type safety because the List<Article> has a CrazyArticle in it!
这里至少有两个选项:
1您可以使用LINQ Cast运算符构建IArticle类型的新列表:
var iarticles = articles.Cast<IArticle>().ToList();
2您可以更改为返回IEnumerable:
// this is legal because IEnumerable<T> is declared as IEnumerable<out T>
IEnumerable<IArticle> iarticles = articles;
将列表指定给列表不起作用的原因是,您可以执行以下操作:
class CrazyArticle : IArticle { ... }
List<Article> articles = ...
List<IArticle> iarticles = articles; // this is not actually legal
iarticles.Add(new CrazyArticle());
// now either things should crash because we tried to add CrazyArticle to a List<Article>,
// or we have violated type safety because the List<Article> has a CrazyArticle in it!
这里至少有两个选项:
1您可以使用LINQ Cast运算符构建IArticle类型的新列表:
var iarticles = articles.Cast<IArticle>().ToList();
2您可以更改为返回IEnumerable:
// this is legal because IEnumerable<T> is declared as IEnumerable<out T>
IEnumerable<IArticle> iarticles = articles;