C#泛型中如何适应继承关系

小灰狼 2021-04-29 09:07:35
一个父类,多个子类
父类中有共同属性,想用一个方法实现对这个公共属性的逻辑处理
我的项目里,定义了实体类的父类,都有一个主键属性 public long? Id,我要在一个方法中,实现从列表中找出指定主键的实体
但是在使用时,出现编译错


public class BaseEntity {
public long? Id { get; set; }
}

public class Employee : BaseEntity {
// 省略
}

public class Employee : BaseEntity {
// 省略
}

public class EntityUtil {
public static BaseEntity FindEntityInListById(List<BaseEntity> list, long id){
foreach(BaseEntity item in list){
if(item.Id == id){
return item;
}
return null;
}
}
}

public class MyBusiness {
public void f(){
List<Employee> employeeList = ......
// 下面语句编译错误,泛型的类型不一致
Employee emp = EntityUtil.FindEntityInListById(employeeList, 10L);
}
}

...全文
152 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
morliz子轩 2021-04-29
  • 打赏
  • 举报
回复
这个问题,我看了一下,是你存在实体基类,而没有业务基类,所以每个BLL构造方法都需要加上:where T:<实体基类>

//demo:

//【框架实体类的基类】
[DataContract]
public class BaseEntity
{
        [DataMember]
        public string CurrentLoginUserId { get; set; }
}

//实体类
[DataContract]
public class AddressInfo : BaseEntity
{
      #region Field Members
      #endregion
}

//【业务基类对象】
public class BaseBLL<T> where T : BaseEntity, new()
{

}

//实体业务层方法类
public class LoginLog : BaseBLL<LoginLogInfo>
{
        //构造函数
        public LoginLog() : base()
        {
            Init(GetType().FullName, System.Reflection.Assembly.GetExecutingAssembly().GetName().Name);
        }
}

//【数据访问层的基类
public abstract class BaseDALSQL<T> : AbstractBaseDAL<T>, IBaseDAL<T> where T : BaseEntity, new()
{
    //构造函数
    public BaseDALSQL() {}
}

wanghui0380 2021-04-29
  • 打赏
  • 举报
回复
public static BaseEntity FindEntityInListById<T>(IEnumerable<T> list, long id) where T:BaseEntity

111,096

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧