索引自定义堆栈 Class
Indexing a custom Stack Class
我目前正在使用 Udemy 课程进行一些 C# 单元测试。本课程中实现了当前Stackclass:
namespace Testing
{
public class Stack<T>
{
public readonly List<T> _list = new List<T>();
public int Count => _list.Count;
public void Push(T obj)
{
if (obj == null)
throw new ArgumentNullException();
_list.Add(obj);
}
public T Pop()
{
if (_list.Count == 0)
throw new InvalidOperationException();
var result = _list[_list.Count - 1];
_list.RemoveAt(_list.Count - 1);
return result;
}
public T Peek()
{
if (_list.Count == 0)
throw new InvalidOperationException();
return _list[_list.Count - 1];
}
}
}
现在,我不明白为什么Peek
函数可以使用:
return _list[_list.Count - 1];
据我所知,如果未明确实现此类功能(此处似乎并非如此),则无法为列表对象编制索引。此外,如果我创建该对象的实例:
Stack<int> newStack = new Stack<int>();
newStack.Push(5);
var lastElement = newStack[0];
我收到一条波浪形的错误消息:
cannot apply indexing with to an expression of 'Testing.Stack<int>'
...这支持我无法为该实例编制索引的假设。有人可以向我解释一下这种行为吗?
As far as I know, A List object cannot be indexed
这是不正确的。 C# 列表是 dynamic array, similar to the c++ std::vector
. You are probably thinking of linked list 的一种类型,一种完全不同的类型,我很少推荐使用它。
cannot apply indexing with to an expression of 'Testing.Stack'
这是因为您还没有实施indexer。假设您希望零成为最近添加的项目:
public T this[int i] => _list[Count - i - 1];
虽然编写自己的堆栈作为练习很有用,但对于实际工作,我建议使用内置的 stack. There is also source code available。
我目前正在使用 Udemy 课程进行一些 C# 单元测试。本课程中实现了当前Stackclass:
namespace Testing
{
public class Stack<T>
{
public readonly List<T> _list = new List<T>();
public int Count => _list.Count;
public void Push(T obj)
{
if (obj == null)
throw new ArgumentNullException();
_list.Add(obj);
}
public T Pop()
{
if (_list.Count == 0)
throw new InvalidOperationException();
var result = _list[_list.Count - 1];
_list.RemoveAt(_list.Count - 1);
return result;
}
public T Peek()
{
if (_list.Count == 0)
throw new InvalidOperationException();
return _list[_list.Count - 1];
}
}
}
现在,我不明白为什么Peek
函数可以使用:
return _list[_list.Count - 1];
据我所知,如果未明确实现此类功能(此处似乎并非如此),则无法为列表对象编制索引。此外,如果我创建该对象的实例:
Stack<int> newStack = new Stack<int>();
newStack.Push(5);
var lastElement = newStack[0];
我收到一条波浪形的错误消息:
cannot apply indexing with to an expression of 'Testing.Stack<int>'
...这支持我无法为该实例编制索引的假设。有人可以向我解释一下这种行为吗?
As far as I know, A List object cannot be indexed
这是不正确的。 C# 列表是 dynamic array, similar to the c++ std::vector
. You are probably thinking of linked list 的一种类型,一种完全不同的类型,我很少推荐使用它。
cannot apply indexing with to an expression of 'Testing.Stack'
这是因为您还没有实施indexer。假设您希望零成为最近添加的项目:
public T this[int i] => _list[Count - i - 1];
虽然编写自己的堆栈作为练习很有用,但对于实际工作,我建议使用内置的 stack. There is also source code available。