编写泛型方法,编译器期望T是已知类型

时间:2015-06-10 18:07:13

标签: c# generics

我正在编写一个通用的扩展方法。编译器不接受我的泛型参数。编译器消息是

类型或命名空间名称' T'找不到(你错过了使用指令或汇编引用吗?

有人可以指出我应该采取哪些不同的做法?这是代码

public static class IEnumerableExtensionMethods
{
  public static Stack<T> ToStack(this IEnumerable<T> source)
  {
     var reversed = source.Reverse();
     if(source is ICollection<T>)
        return new Stack<T>(reversed);

     var returnStack = new Stack<T>(reversed.Count);
     foreach (T item in reversed)
        returnStack.Push(item);

     return returnStack;
  }
}

1 个答案:

答案 0 :(得分:8)

您的方法签名需要一个类型参数:

public static Stack<T> ToStack<T>(this IEnumerable<T> source)

作为旁注,一旦解决了这个问题,就不会编译。您需要在Count()上调用IEnumerable方法:

var returnStack = new Stack<T>(reversed.Count());

同样@Servy在评论中指出,检查这是否是ICollection<T>是不必要的;有一个Stack<T>构造函数需要IEnumerable<T>。你可以使用:

new Stack<T>(source.Reverse());

代替。