日期:2014-05-18  浏览次数:20937 次

~泛型编程中的类型转换问题~~~~~~~~~~~~~~~~~
我在实体层定义了两个类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报错:

引用
错误 1 无法将类型“User.Model.UserInfoList”隐式转换为“System.Collections.Generic.List<User.Model.UserInfoList>”


怎么回事?

------解决方案--------------------
看看错误提示就知道了!!!很明显了.
返回的是类对象,定义的方法需要返回的是泛型对象!
------解决方案--------------------
傻了吧,返回类型是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)