C#将泛型类型作为泛型类型参数传递?

时间:2015-06-09 10:55:20

标签: c# generics ienumerable

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。这是我提出的语法,但它没有通过编译器。什么方式得到我想要的?谢谢!

1 个答案:

答案 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 }}