使用LINQ将项目推入堆栈

4 c# linq

我怎样才能以编程方式将字符串数组推入通用堆栈?

字符串数组

 string[] array=new string[]{"Liza","Ana","Sandra","Diya"};
Run Code Online (Sandbox Code Playgroud)

堆栈设置

 public class stack<T>
 {
    private int index;

    List<T> list; 

    public stack()
    {
        list = new List<T>();
        index=-1;

    }

    public void Push(T obj)
    {

        list.Add(obj);
        index++;
    }
 ...........
}
Run Code Online (Sandbox Code Playgroud)

我需要改变什么?

stack<string> slist = new stack<string>();
var v = from vals in array select (p => slist.Push(p));
Run Code Online (Sandbox Code Playgroud)

错误报告 :

The type of the expression in the select clause is incorrect.

Nol*_*rin 13

LINQ是一种查询语言/框架.你想在这里执行的是对集合对象的修改而不是查询(选择) - 这肯定不是 LINQ为(或甚至能够)设计的.

但是,您可能想要做的是为类定义一个扩展方法Stack<T>.请注意,在这里使用BCL Stack<T>类型也是有意义的,这正是您所需要的,而不是使用重新发明轮子List<T>.

public static void PushRange<T>(this Stack<T> source, IEnumerable<T> collection)
{
    foreach (var item in collection)
        source.Push(item);
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以执行以下操作:

myStack.PushRange(myCollection);
Run Code Online (Sandbox Code Playgroud)

如果您还没有确信,另一个哲学原因是:LINQ的创建是为了将函数式范例引入C#/ .NET,而函数式编程的核心是无副作用的代码.因此,将LINQ与状态修改代码相结合将是非常不一致的.