我正在编写一个通用的扩展方法。编译器不接受我的泛型参数。编译器消息是
类型或命名空间名称' 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;
}
}
答案 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());
代替。