泛型中 基类和子类 怎么转换?

ayun00 2013-08-07 06:39:31
基类 A 子类 B

基类方法

public List<A> getlist()
{
return;
}

List<B> list = base.getlist();


怎么达成 上面的目标?
...全文
646 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ayun00 2013-08-12
  • 打赏
  • 举报
回复
如果有 in out 要怎么写呢?
裸奔的蜗牛 2013-08-09
  • 打赏
  • 举报
回复
引用 8 楼 caozhy 的回复:
[quote=引用 2 楼 lizhi3186575 的回复:] 这涉及到泛型的可变性,可以使用out参数或in参数来实现转换,具体参考文章:http://www.cnblogs.com/zhili/archive/2012/11/12/GenericVari.html
引用 4 楼 ayun00 的回复:
[quote=引用 2 楼 lizhi3186575 的回复:] 这涉及到泛型的可变性,可以使用out参数或in参数来实现转换,具体参考文章:http://www.cnblogs.com/zhili/archive/2012/11/12/GenericVari.html
理解我的问题是 协变与逆变 的问题 但是怎么具体到我的例子中 要怎么写 还没有看懂[/quote]
引用 7 楼 whd0310 的回复:
List<A> 和 List<B> 是完全不相关的两个类型,A、B确定后该泛型就为封闭类型,为指定前是开放类型,除非你详细的知道A\B的内部结构。 也可以在泛型参数中指定参数是协变的,这就要求类型 A和B有一定的继承关系(类继承或接口继承)。
引用 7 楼 whd0310 的回复:
List<A> 和 List<B> 是完全不相关的两个类型,A、B确定后该泛型就为封闭类型,为指定前是开放类型,除非你详细的知道A\B的内部结构。 也可以在泛型参数中指定参数是协变的,这就要求类型 A和B有一定的继承关系(类继承或接口继承)。
这是不行的。建议别人看以前最好自己先看看。[/quote] 谢谢指正,我本来是想说如果使用协变类型 AB要有关系,但不是说能转换。 List<A> 和 List<B> 是完全不相关的两个类型。
threenewbee 2013-08-09
  • 打赏
  • 举报
回复
引用 9 楼 whd0310 的回复:
[quote=引用 8 楼 caozhy 的回复:] [quote=引用 2 楼 lizhi3186575 的回复:] 这涉及到泛型的可变性,可以使用out参数或in参数来实现转换,具体参考文章:http://www.cnblogs.com/zhili/archive/2012/11/12/GenericVari.html
引用 4 楼 ayun00 的回复:
[quote=引用 2 楼 lizhi3186575 的回复:] 这涉及到泛型的可变性,可以使用out参数或in参数来实现转换,具体参考文章:http://www.cnblogs.com/zhili/archive/2012/11/12/GenericVari.html
理解我的问题是 协变与逆变 的问题 但是怎么具体到我的例子中 要怎么写 还没有看懂[/quote]
引用 7 楼 whd0310 的回复:
List<A> 和 List<B> 是完全不相关的两个类型,A、B确定后该泛型就为封闭类型,为指定前是开放类型,除非你详细的知道A\B的内部结构。 也可以在泛型参数中指定参数是协变的,这就要求类型 A和B有一定的继承关系(类继承或接口继承)。
引用 7 楼 whd0310 的回复:
List<A> 和 List<B> 是完全不相关的两个类型,A、B确定后该泛型就为封闭类型,为指定前是开放类型,除非你详细的知道A\B的内部结构。 也可以在泛型参数中指定参数是协变的,这就要求类型 A和B有一定的继承关系(类继承或接口继承)。
这是不行的。建议别人看以前最好自己先看看。[/quote] 谢谢指正,我本来是想说如果使用协变类型 AB要有关系,但不是说能转换。 List<A> 和 List<B> 是完全不相关的两个类型。[/quote] 不是,C#根本没有支持“协变类型”,只是换汤不换药地刷了小手段。
threenewbee 2013-08-08
  • 打赏
  • 举报
回复
引用 2 楼 lizhi3186575 的回复:
这涉及到泛型的可变性,可以使用out参数或in参数来实现转换,具体参考文章:http://www.cnblogs.com/zhili/archive/2012/11/12/GenericVari.html
引用 4 楼 ayun00 的回复:
[quote=引用 2 楼 lizhi3186575 的回复:] 这涉及到泛型的可变性,可以使用out参数或in参数来实现转换,具体参考文章:http://www.cnblogs.com/zhili/archive/2012/11/12/GenericVari.html
理解我的问题是 协变与逆变 的问题 但是怎么具体到我的例子中 要怎么写 还没有看懂[/quote]
引用 7 楼 whd0310 的回复:
List<A> 和 List<B> 是完全不相关的两个类型,A、B确定后该泛型就为封闭类型,为指定前是开放类型,除非你详细的知道A\B的内部结构。 也可以在泛型参数中指定参数是协变的,这就要求类型 A和B有一定的继承关系(类继承或接口继承)。
引用 7 楼 whd0310 的回复:
List<A> 和 List<B> 是完全不相关的两个类型,A、B确定后该泛型就为封闭类型,为指定前是开放类型,除非你详细的知道A\B的内部结构。 也可以在泛型参数中指定参数是协变的,这就要求类型 A和B有一定的继承关系(类继承或接口继承)。
这是不行的。建议别人看以前最好自己先看看。
裸奔的蜗牛 2013-08-08
  • 打赏
  • 举报
回复
List<A> 和 List<B> 是完全不相关的两个类型,A、B确定后该泛型就为封闭类型,为指定前是开放类型,除非你详细的知道A\B的内部结构。 也可以在泛型参数中指定参数是协变的,这就要求类型 A和B有一定的继承关系(类继承或接口继承)。
烈火蜓蜻 2013-08-08
  • 打赏
  • 举报
回复
baidu协变和逆变
ayun00 2013-08-08
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
List<B> list = base.getlist().Select(x => x as B).ToList(); 不过从A转换到B需要自己重载显式转换运算符,反之不需要。
这样效率高吗?
ayun00 2013-08-08
  • 打赏
  • 举报
回复
引用 2 楼 lizhi3186575 的回复:
这涉及到泛型的可变性,可以使用out参数或in参数来实现转换,具体参考文章:http://www.cnblogs.com/zhili/archive/2012/11/12/GenericVari.html
理解我的问题是 协变与逆变 的问题 但是怎么具体到我的例子中 要怎么写 还没有看懂
threenewbee 2013-08-07
  • 打赏
  • 举报
回复
List<B> list = base.getlist().Select(x => x as B).ToList(); 不过从A转换到B需要自己重载显式转换运算符,反之不需要。
人生导师 2013-08-07
  • 打赏
  • 举报
回复
这涉及到泛型的可变性,可以使用out参数或in参数来实现转换,具体参考文章:http://www.cnblogs.com/zhili/archive/2012/11/12/GenericVari.html
ayun00 2013-08-07
  • 打赏
  • 举报
回复
自己顶一下......

111,098

社区成员

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

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

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