【发布时间】:2015-06-10 18:07:12
【问题描述】:
我正在编写一个通用的扩展方法。编译器不接受我的泛型参数。编译器消息是
找不到类型或命名空间名称“T”(您是否缺少 using 指令或程序集引用?
有人可以指出我应该做些什么不同的事情吗?这是代码
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;
}
}
【问题讨论】:
-
你的整个方法体可以是
return new Stack<T>(source.Reverse());。无需手动插入每个项目。 -
我会试试的。我把条件放在那里,因为 source 是 IEnumerable 并且 Stack
(param) 上的文档说 param 是 ICollection。 -
@philogon 不,参数是
IEnumerable<T>,而不是ICollection<T>。 -
抱歉重复了。在我撰写问题时,他们都没有出现。 (我确实看过。)
-
文档 /does/ 说 IEnumerable。我只是读得太快了之类的。