List<子类>转List<父类>过程中犯的一些错误

新人犯的错误,记录一下供以后参考。

有两个类

1 public class A
2 {
3    public string Name{get;set;}
4 }
5
6 public class B:A
7 {
8   public int Age{get;set;}
9 }

有一个方法,需要类B age作为条件,最后要返回的是其父类A的集合

1 public List<A> GetAByAge(int age)
2 {
3      //方法体
4 }

本心想着,B是A的子类,直接返回List<B>即可,但实际是不行。于是我开始找原因,寻寻觅觅发现,原来思路出问题了。

事实是这样子的,虽然A是B的子类,但是List<A> 和List<B>他的实际类型都是List<T>,A、B只是List<T>对象的一个泛型而已。所以,直接返回肯定是不行的,强转,自然也是有问题的。那要怎么解决呢?高手告诉我,其实List已经提供了这种转的方法。

比如b是List<B>类型的一个对象,那么就可以利用b.Cast<A>().ToList();来转换为List<A> 对象。

另外我也发现,可以这么写List<A> a=new List<A>(b);这种写法我没测试,大家可以试试,应该也是可以的。

时间: 2024-12-29 15:23:36

List<子类>转List<父类>过程中犯的一些错误的相关文章

Odoo 仓库调拨移动过程中 单位不允许错误的分析及解决方案

Odoo 仓库调拨过程中,有时候会碰见一下错误内容: The roundings of your Unit of Measures on the move vs.  on the product don't allow to do these operations or you are not transferring the picking at once. 这个错误的提示莫名其妙,看起来好像是因为某个产品的单位设置的不对造成的,然而经过一番分析,才发现里面别有洞天.(在这里我忍不住还是要吐槽

子类实例化,父类构造器中被调用被子类重写的方法,会执行父类还是子类的呢?

public class Test001 { public static void main(String[] args) { new Child(); } }class Father{ private String name = "f"; public Father(){ tell(); } public void tell(){ System.out.println("father "+this.name); }}class Child extends Fath

2016.7.5 记项目过程中犯的一个从未察觉的低级错误

今天在项目中遇到了一个很奇葩的问题,具体什么问题就不说了,找了一下午实在找不出来,百般无奈之时,看到了自己敲的一条不太顺眼的代码: if(0<i<31) 心想这样写好像不好,于是将其改成if((i>0)&&(i<31)),编译调试,之前出现的问题居然奇迹般的消失了.经过和同学探讨,得出以下别人都知道的结论: if(0<i<31),程序首先计算0<i,i的范围是0~51,当i>0时,(0<i) == true,在我使用的编译器里面,认为t

扩展jQuery的方法统一处理AJAX调用过程中产生的异常错误信息

由于项目中大量的实用了.post方法,而该方法默认不对请求的异常进行处理,后期又要处理该问题.前期的解决方案是将使用.post请求都改造为$.ajax请求,但由于两个方法的实现(需要的参数)等相差很大,修改起来很麻烦! 期间尝试使用定义"AJAX 请求发生错误时执行函数($(document).ajaxError())" 的方式来解决问题,但影响范围太大,长轮询发生的错误也被捕获,导致页面一打开就弹出系统异常的对话框. 所以这里采用扩展jQuery的方法的技术来解决问题: /* 扩展j

apache安装php7过程中遇到到段错误

1.假如apache的配置文件httpd.conf同时加载libphp5.so和libphp7.so 2.如图所示,modules下同时存在libphp5.so/libphp7.so 3.启动apache,遇到下列错误 4.解决办法就是卸载php5:yum remove php;因为我是yum方式安装的php5,所有yum remove卸载掉即可 同时在httpd.conf中注释掉php5的模块

在下载SOPC代码的过程中遇到的一些错误

(1)Error (209015): Can't configure device. Expected JTAG ID code 0x02D120DD for device 2, but found JTAG ID code 0x00000000. 今天下载代码到板子中遇到的一个比较迷的问题,一开始下载了三次都是这个问题,百度上有人说是Device选错了,我查了下我并没有选错,也有人说是电压不稳定的,这就很尴尬了.于是我将代码重新编译了一下,然后换了一根下载线来下载,发现竟然可以成功下载了,我又

ruby on rails 的使用过程中,遇到的错误及解决办法

1./data/drolay11/lcb_saas/tmp/build-147274463612855/vendor/bundle/ruby/2.1.0/bin/rake: symbol lookup error: /data/drolay11/lcb_saas/tmp/build-147274463612855/vendor/bundle/ruby/2.1.0/gems/mysql2-0.3.17/lib/mysql2/mysql2.so: undefined symbol: mysql_ge

ansible安装过程中常遇到的错误

1.安装完成后允许命令报错 Traceback (most recent call last):   File "/usr/bin/ansible", line 197, in <module>     (runner, results) = cli.run(options, args)   File "/usr/bin/ansible", line 163, in run     extra_vars=extra_vars,   File "

Linux系统在启动过程中启动级别发生错误的解决办法

一.系统启动级别一共有六个: 0:系统停机模式,系统不可以正常启动 1:单用户模式, root权限,用于系统的维护,禁止远程登陆 2:多用户模式,没有NFS网络支持 3:完整的多用户文本模式,有NFS,登陆后进入控制台命令行模式 4:系统未使用,作为保留一般不用 5:图形化模式,登陆后进入GUI模式 6:重启模式,默认级别不能为6,否则不能正常启动 示例:若我们设置默认模式为poweroff.target,则在开机的时候会出现启动关机死循环状态 使用reboot命令后,会出现如下情况:(停在该位