2017-02-18 61 views
1

我想声明一个数组并将其发送到我的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; 
     } 
} 

回答

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; 
    } 
} 
+0

知道了!谢谢Icemanind! – Justin

+0

@Justin - 蒂姆还指出,你正在返回你正在修改的同一个对象。考虑解决这个问题,这不是多余的。 – Icemanind

+0

你的意思是简单地将名称从值改为其他名称? – Justin

0

你有几个problems--要排序整个数组,每次都通过循环,然后您试图在每次循环中打印整个数组结果的.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中,你正在返回你正在修改的同一个对象。这是多余的。它有效,但可能不是你想要的。

+0

感谢您的帮助。你能澄清一下更多关于你的意思是关于返回我在DLL中修改的对象吗? – Justin

+0

'Array.Sort(values)'正在对'values'数组进行排序,这实际上与您传入的数组相同,而不是其副本。您将返回传入的相同引用,然后将其分配回与您传入的变量相同的值。调用的'values'数组已在此时排序,无需返回或重新分配它 – Tim

+0

I道歉,但你能告诉我这个代码吗?我仍然没有关注 – Justin