Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ将项目推入堆栈_C#_Linq - Fatal编程技术网

C# 使用LINQ将项目推入堆栈

C# 使用LINQ将项目推入堆栈,c#,linq,C#,Linq,如何通过编程将字符串数组推入通用堆栈 字符串数组 堆栈设置 我需要找什么零钱 错误报告: LINQ是一种查询语言/框架。您希望在这里执行的是对集合对象的修改,而不是查询选择-这肯定不是LINQ的设计目的,甚至不是LINQ的功能 但是,您可能想做的是定义一个扩展方法,该扩展方法可用于堆栈类。请注意,在这里使用BCL堆栈类型也是有意义的,这正是您所需要的,而不是使用列表重新创建轮子 如果您还不确信,另一个哲学原因是:LINQ的创建是为了将函数范式引入C/.NET,而函数编程的核心是无副作用的代码。因

如何通过编程将字符串数组推入通用堆栈

字符串数组

堆栈设置

我需要找什么零钱

错误报告:


LINQ是一种查询语言/框架。您希望在这里执行的是对集合对象的修改,而不是查询选择-这肯定不是LINQ的设计目的,甚至不是LINQ的功能

但是,您可能想做的是定义一个扩展方法,该扩展方法可用于堆栈类。请注意,在这里使用BCL堆栈类型也是有意义的,这正是您所需要的,而不是使用列表重新创建轮子


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

第一个问题是推送返回一个空值。Select需要某个值

您只是在做一个循环,不需要使用链接

因为堆栈在内部存储列表,所以可以通过向列表传递数组来创建列表

那么你的情况呢

List<string> myList = new List<string>(array); 

创建列表。

Push需要一个返回类型,以便您能够在select子句中使用它。实际上,它返回void。我认为,你的例子是对LINQ的一种可怕的滥用。即使它有效,您也会使用select子句中函数的一个副作用来完成与select的预期任务完全无关的事情。如果有一个ForEach扩展,那么在这里使用LINQ是合理的,但我会避免使用它并坚持使用ForEach循环

 foreach (var val in array)
 {
     slist.Push(val);
 }
这在意图上更加清晰,不会让人对你想要完成的事情感到困惑。

改变

public void Push(T obj)

并忽略返回值

免责声明:我不推荐这样的突变。

试试这个

string[] arr = new string[]{"a","f"};
var stack = new Stack<string>();
arr.ToList().ForEach(stack.Push);

虽然这很酷,但它并不比for循环好。

为什么要使用扩展方法?stack类似乎是由他编写的,所以imho最好使用普通方法。@Maximillian:仔细看看我的代码。该方法采用堆栈参数,而不是列表参数。他似乎在重新发明轮子,这是没有必要的。啊,你建议为BCL的堆栈类创建一个扩展方法,而不是为他的。好吧,这当然有道理。抱歉误会了。@Maximillian:不用担心是的,我最初并没有明确表示我是在指导他使用Stack。是的,现在我明白了linq的用途了!谢谢
public static void PushRange<T>(this Stack<T> source, IEnumerable<T> collection)
{
    foreach (var item in collection)
        source.Push(item);
}
myStack.PushRange(myCollection);
List<string> myList = new List<string>(array); 
 foreach (var val in array)
 {
     slist.Push(val);
 }
public void Push(T obj)
public T Push(T obj)
string[] arr = new string[]{"a","f"};
var stack = new Stack<string>();
arr.ToList().ForEach(stack.Push);