List与IList有什么区别?
在DAL层中我这样写的:没有报错//按照sql语句查询对象
public IList<GroupsInfo> SelectGroupsBySql(string SqlString,params SqlParameter[] para)
{
List<GroupsInfo> list = new List<GroupsInfo>();
SqlDataReader reader = null;
try
{
reader = DataBase.ExecuteReader(DataBase.ConnectionString, SqlString, para);
在BLL层我这样写的就报错呢。
public IList<GroupsInfo> SelectGroupsBySql(string SqlString, params SqlParameter[] para)
{
List<GroupsInfo> list = gs.SelectGroupsBySql(SqlString,para);
return list;
}
报的错误是:
错误 3 无法将类型“System.Collections.Generic.IList<LogModel.GroupsInfo>”隐式转换为“System.Collections.Generic.List<LogModel.GroupsInfo>”。存在一个显式转换(是否缺少强制转换?) E:\工作软件\my\其他\LogManageSystem\LogBLL\GroupsManager.cs 34 37 LogBLL
请教大虾们。。。。。。。。99我 --------------------编程问答-------------------- 一个接口一个类,没什么区别吧.
--------------------编程问答-------------------- 你dal层不报错????? --------------------编程问答-------------------- public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable
{
}IList 泛型接口是 ICollection 泛型接口的子代,
执行效果好并且是类型安全的
--------------------编程问答-------------------- 说的好!
--------------------编程问答-------------------- BLL中返回类型是一个接口,你return 时候要返回一个接口类型,你那是return list;返回的是一个
GroupsInfo集合。 --------------------编程问答-------------------- 你可以吧一个 list<s> 转为 ilist<s>
但你不能把ilist<s> 转为 list<s>
--------------------编程问答-------------------- 楼主搜索一下关于继承,多态方面的内容。 --------------------编程问答--------------------
就是接口和类的区别:)
实现接口的类可以被隐式转换为接口,如第一个例子,但接口不可以被隐式转换为类,这就是第二个例子出错的原因,你的gs.SelectGroupsBySql(SqlString,para)返回的是一个IList<T>泛型对象吧? --------------------编程问答-------------------- list 是类,继承自ilist 就知道这么多了。至于你的报错,你dal中是Ilsit 到bll用Ilsit接受。不能用list 接受 --------------------编程问答-------------------- IList是接口
List是类
List实现了IList接口 --------------------编程问答-------------------- 现实上 这个现象是对的 --------------------编程问答-------------------- 实际是对,但语言上是不允许的,如果实际上是的话,所以要求你是一个强制转换
例如 有一个类 动物 ,又有两个类 一个人 一个狗 都继承于 动物 这个类 ,你可以把一个人 或狗 称为 动物 ,但 反了 是不行的
--------------------编程问答--------------------
正解~~ --------------------编程问答-------------------- --------------------编程问答--------------------
正解 --------------------编程问答-------------------- List<T>:IList<T> --------------------编程问答-------------------- IList<string> iList = new List<string>();
List<string> list = new List<string>();
看看这个, 就会有点想法了。。 --------------------编程问答-------------------- List<T>lst=IList<T>.toList();
就可以转化了. --------------------编程问答-------------------- ILIST比list多一个"I" --------------------编程问答-------------------- 就是接口和类的区别:)
实现接口的类可以被隐式转换为接口,如第一个例子,但接口不可以被隐式转换为类,这就是第二个例子出错的原因,你的gs.SelectGroupsBySql(SqlString,para)返回的是一个IList<T>泛型对象吧? --------------------编程问答-------------------- --------------------编程问答-------------------- 一直看到你。你好厉害。
--------------------编程问答-------------------- --------------------编程问答-------------------- IList是一个接口 List是他的实现 --------------------编程问答-------------------- 一个类,一个接口
补充:.NET技术 , ASP.NET