~泛型编程中的类型转换问题~~~~~~~~~~~~~~~~~
我在实体层定义了两个类UserInfo和UserInfoList
UserInfo用来get、set用户信息,如姓名、密码等
UserInfoList是这样的:
C# code
namespace User.Model
{
/// <summary>
/// UserInfo的列表
/// </summary>
public class UserInfoList : List<UserInfo>
{
}
}
然后在数据访问层定义了一个读取数据库并返回用户列表的类Users:
C# code
namespace User.DAL
{
public class Users
{
public List<Model.UserInfoList> MyQuery(String filter = "", SqlCommand cmd = null)
{
...
DataTable dt
Model.UserInfoList mdls = new Model.UserInfoList();
foreach (DataRow dr in dt.Rows)
{
Model.UserInfo mdl = new Model.UserInfo();
mdl.uName = dr["uName"].ToString();
mdl.uPwd = dr["uPwd"].ToString();
mdl.bStop = dr["bStop"].ToString().ToLower() == "true" ? true : false;
mdls.Add(mdl);
}
return mdls; //~~~~~~~这里报错!
}
}
}
结果返回值上mdls报错:
怎么回事?
------解决方案--------------------看看错误提示就知道了!!!很明显了.
返回的是类对象,定义的方法需要返回的是泛型对象!
------解决方案--------------------傻了吧,返回类型是List<Model.UserInfoList>,mdls不是List<Model.UserInfoList>类型
List<Model.UserInfoList> list=new List<Model.UserInfoList>();
Model.UserInfoList mdls = new Model.UserInfoList();
foreach (DataRow dr in dt.Rows)
{
Model.UserInfo mdl = new Model.UserInfo();
mdl.uName = dr["uName"].ToString();
mdl.uPwd = dr["uPwd"].ToString();
mdl.bStop = dr["bStop"].ToString().ToLower() == "true" ? true : false;
mdls.Add(mdl);
}
list.Add(mdls);
应该是这样吧。
------解决方案--------------------public class UserInfoList : ICollection<UserInfo>
不过没有什么必要。List已经实现了ICollection<UserInfo>
------解决方案--------------------List<Model.UserInfoList> != List<UserInfo>
------解决方案--------------------继承 。
------解决方案-------------------- public List<Model.UserInfoList> MyQuery(String filter = "", SqlCommand cmd = null)
public Model.UserInfoList MyQuery(String filter = "", SqlCommand cmd = null)