我试图声明一个数组并将其发送到我的DLL以按升序排序,但我似乎无法使其正常工作。
这是我从下面的代码得到的输出
主程序
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;
}
}
答案 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中,您将返回正在修改的同一对象。这是多余的。它有效,但可能不是你想要的。