我正在从方法中返回IList<T>

在调用类中,我想在列表/堆栈的开头插入一个值。

List<T>中插入值比在Stack<T>中推送值要慢。但是要使用堆栈,我需要将其拆箱。

所以问题是,取消包装还是在Insert中使用List<T>哪个更好?哪一个比较贵?

class MyClass
{
}

IList<MyClass> Method1()
{
}

class MainClass
{
   List<MyClass> list = (List<MyClass>)Method1();
   list.insert(0,new MyClass{...}); //insert at the start.

   Stack<MyClass> stack = (Stack<MyClass>)Method1();
   stack.Push(new MyClass{...}); //insert at the start
}

最佳答案

您不会在这两个版本中都取消装箱(尽管第一个不会编译..而第二个总是在运行时失败)-

但是,无论哪种情况,如果您进行转换,则只有在实际的基础实现是该类时,该转换才起作用。

如果您的方法返回IList<T>,我强烈建议您坚持使用IList<T>成员。将结果转换为List<T>Stack<T>(即,无论内部实现是什么-都不是Stack<T>,因为它没有实现IList<T>)都是非常危险的。

返回IList<T>的主要原因是有目的地允许您以后更改内部实现。内部的Method1稍后可能会从List<T>更改为其他IList<T>,这将导致您的代码意外中断。

话虽这么说,如果您知道内部实现可能是某种类型,则可以进行检查-但我不会盲目地进行转换。

10-06 14:42
查看更多