关于泛型集合类List的扩展方法问题

Kai-3 2016-07-29 09:06:50
我想实现泛型集合自带的方法list.Cast<T>()同样的效果:把list转换为List<T>

List<T>自带的Cast使用示例:
List<Dog> listDog = new List<Dog>();
List<GodenHairDog> listGoldenHairDog = listDog.Cast<GodenHairDog>().ToList();//把Dog类型的集合转换成 GodenHairDog类型的集合。其中GodenHairDog继承自Dog类

我自己写的类似功能的扩展MyCast 使用示例:
List<GodenHairDog> list = listDog.MyCast<Dog,GodenHairDog>().ToList();

问题:我怎么修改我的源代码,才能像List<T>自带的方法Cast<T>()只传入一个类型占位符T??????
我自己写的要传入两个类型占位符才得行

下面是我写的扩展方法代码

public static class ListExtension
{
public static List<Tout> MyCast<T,Tout>(this List<T> list)
where Tout : T
{
List<Tout> newList = new List<Tout>();
for (int i = 0; i < list.Count; i++)
{
Tout item = (Tout)list[i];
newList.Add(item);
}

return newList;
}
}
}
...全文
314 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
Cast<> 并不是List<T>的功能,而是Linq的功能。 你可以类似这样来声明泛型参数签名:
public static IEnumerable<Tout> MyCast<Tout>(this IList list)
{
    foreach(var x in list)
    {
        yield return (Tout)x;
    }
}
  • 打赏
  • 举报
回复
List<GodenHairDog> listGoldenHairDog = listDog.Select(x=>(GodenHairDog)x).ToList();
  • 打赏
  • 举报
回复
查下协变、逆变吧,你这种没必要扩展 而且你真要实现这种的话,直接用automapper之类的dll就行了

110,539

社区成员

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

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

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