public static C RotateLeft<C, T>(C list, int count) where C : IEnumerable<T>
{
return list.Skip (count).Concat(list.Take(count));
}
我希望得到类似这样的东西,其中T是IEnumerable的类型参数,C实现IEnumerable。这是我提出的语法,但它没有通过编译器。什么方式得到我想要的?谢谢!
答案 0 :(得分:5)
为什么不遗漏C
- param?
public static IEnumerable<T> RotateLeft<T>(IEnumerable<T> list, int count)
{
return list.Skip (count).Concat(list.Take(count));
}
编辑:正如Suresh Kumar Veluswamy已经提到过的,您也可以简单地将结果转换为C
的实例:
public static C RotateLeft<C, T>(C list, int count) where C : IEnumerable<T>
{
return (C) list.Skip(count).Concat(list.Take(count));
}
然而,虽然这将解决您的编译器问题但它不会让您得到您想要的,因为它在尝试将InvalidCastException
的结果转换为{{1}的实例时返回Concat
}}