2017-02-18 59 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