【发布时间】:2016-09-13 07:19:39
【问题描述】:
我最近接触了 C#,并试图学习一些关于 Stacks 的知识。我想尝试对堆栈进行排序,首先将其转换为数组,但出现了一个奇怪的错误。
这是我的代码:
using System;
using System.Collections.Generic;
class Program
{
public static Stack<int> numbers = new Stack<int>();
static void Main(string[] args)
{
string[] input = Console.ReadLine().Split(' ');
int n = int.Parse(input[0]);
int s = int.Parse(input[1]);
int x = int.Parse(input[2]);
input = Console.ReadLine().Split(' ');
for (int i = 0; i < n; i++)
{
numbers.Push(int.Parse(input[i]));
}
for (int i = 0; i < s; i++)
{
numbers.Pop();
}
if (numbers.Count == 0)
Console.WriteLine(0);
else if (numbers.Contains(x))
Console.WriteLine("true");
else
Console.WriteLine(Array.Sort(numbers.ToArray()));
}
}
我的问题是我的代码的最后一个 else 部分(最后一行):
参数 1:无法从 'void' 转换为 'bool'
我想知道为什么会发生这种情况,当Array.Sort() 需要一个数组作为参数时,我传递了number.ToArray(),它应该从 numbers 堆栈中返回一个新数组。
【问题讨论】:
-
您不应该对堆栈进行排序。它破坏了整个堆栈的目的。
-
void方法不返回任何内容,因此您不能在方法中使用它作为参数。下一个问题:你不能Console.WriteLine整个数组。您需要枚举它或使用String.Join(",", numbers)。 -
Array.Sort不返回任何内容。它就地对数组进行排序。
标签: c# arrays sorting stack return-type