将数组写入控制台输出类型名称

时间:2017-02-18 00:18:56

标签: c# arrays

我试图声明一个数组并将其发送到我的DLL以按升序排序,但我似乎无法使其正常工作。

这是我从下面的代码得到的输出

enter image description here

主程序

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] values = {11, 5, 16, 9, 12, 39, 12};
            for (int i = 0; i < values.Length; i++)
            {
                Console.WriteLine(Class1.accendingArray(values));

            }
        }
    }   
}

DLL代码

namespace DLLProject
{
    public class Class1
    {
      public static int[] accendingArray(int[] values)
      {
        Array.Sort(values);
        return values;
      }
 }

2 个答案:

答案 0 :(得分:1)

您的DLL正在返回已排序的数组。但是,在主程序中,您正在迭代数组,希望打印出每个元素。试试这个:

values = Class1.accendingArray(values);
for (int i = 0; i < values.Length; i++)
{
    Console.WriteLine(values[i]);
}

或者,您可以让您的DLL返回IEnumerable<int>,然后使用yield return在主程序中迭代它。

要执行此操作,请将主程序更改为:

foreach (int i in accendingArray(values))
{
    Console.WriteLine(i);
}

在您的DLL中,将其更改为:

public static IEnumerable<int> accendingArray(int[] values)
{
    Array.Sort(values);

    foreach (int i in values)
    {
        yield return i;
    }
}

答案 1 :(得分:0)

你有几个问题 - 你每次都在循环中对整个数组进行排序,然后你试图在每次循环时打印整个数组结果的.ToString()表示。试试这个:

int[] values = {11, 5, 16, 9, 12, 39, 12};
int[] sortedValues = Class1.accendingArray(values);
for (int i = 0; i < values.Length; i++)
{
    Console.WriteLine(sortedValues[i]);
}

此外,在您的DLL中,您将返回正在修改的同一对象。这是多余的。它有效,但可能不是你想要的。