C#将堆栈转换为数组并对其进行排序

Kob*_*bek 0 c# arrays sorting stack return-type

我最近进入了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()));


    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我的代码的最后一部分(最后一行):

参数1:无法从'void'转换为'bool'

我想知道为什么会发生这种情况,当Array.Sort()需要一个数组作为参数时,我传递number.ToArray(),它应该从数字堆栈中返回一个新的数组.

Ore*_*aki 7

由于Array.Sort返回void而不是预期的数组,因此出现错误.

另外,Console.WriteLine获取输入并将其打印到Console,它无法获取数组并打印该数组,它只会打印出实际的数组地址.

为了打印数组(或任何集合),您应该使用string.Join,它接受一个集合并返回由分隔符分隔的字符串.

使用System.Linq.OrderBy非常简单

numbers.OrderBy(num => num).ToArray();
Run Code Online (Sandbox Code Playgroud)

例:

public static void Main()
{
    var numbers = new Stack<int>();
    numbers.Push(4);
    numbers.Push(1);
    numbers.Push(2);

    var numbersSorted = numbers.OrderBy(num => num).ToArray();
    Console.WriteLine(string.Join(", ", numbersSorted));
}
Run Code Online (Sandbox Code Playgroud)

输出: 1,2,4

DotNetFiddle