C#泛型中如何适应继承关系
父类中有共同属性,想用一个方法实现对这个公共属性的逻辑处理
我的项目里,定义了实体类的父类,都有一个主键属性 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);
}
}
相关推荐
你了解C#的协变和逆变吗,看完这篇就懂了
主要介绍了你了解C#的协变和逆变吗,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
详解.NET 4.0中的泛型协变(covariant)和反变(contravariant)
主要介绍了详解.NET 4.0中的泛型协变(covariant)和反变(contravariant),本文讲解了协变和反变的背景知识、.NET 4.0引入的泛型协变、反变性、协变和反变的相互作用等内容,需要的朋友可以参考下
一篇文章看懂C#中的协变、逆变
1. 基本概念 官方:协变和逆变都是术语,前者指能够使用比原始指定的派生类型的派生程度更大(更具体的)的类型,后者指能够使用比原始指定的派生类型的派生程度更小(不太具体的)的类型。[MSDN] 公式: 协变:IFoo<父类> = IFoo<子类>; 逆变:IBar<子类> = IBar<父类>; 暂时不理解没关系,您接着往下看。 2. 协变(Covariance) 1) out关键字 对于泛型类型参数,out 关键字可指定类型参数是协变的。 可以在泛型接口和委托中使用 out 关键字。[MSDN] 2) 鲁迅:一张图胜过千言万语(图小看不
C#协变与逆变解析[项目源码]
本文详细介绍了C#中的协变(Covariance)和逆变(Contravariance)概念及其应用。协变允许将子类泛型隐式转换为父类泛型,例如IEnumerable<Person>可以接受List<Student>;逆变则允许父类泛型隐式转换为子类泛型,例如Action<object>可以赋值给Action<string>。文章通过Person和Student的示例代码,解释了out(协变)和in(逆变)关键字的作用,并列举了C#中支持协变和逆变的常见接口(如IEnumerable<T>、IComparer<T>)和委托(如Func、Action)。最后,作者总结了协变和逆变在泛型接口、委托及数组中的实际应用场景,帮助开发者理解这一高级特性。
EssentialCSharp (《c#2.0本质论》)
《c#2.0本质论》书中所有程序源代码!!!


